perm filename TEX.PAS[WEB,ALS]1 blob
sn#672768 filedate 1982-08-13 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00042 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00005 00002 {4}{9}{$C-,A+,D-,W+}{$C+,D+,W+}
C00021 00003 PROCEDURE Initialize
C00034 00004 {56}PROCEDURE Println
C00048 00005 {28}PROCEDURE Aclose(VAR f:alphafile)
C00065 00006 {109}PROCEDURE Printmemoryw(w:memoryword)
C00076 00007 {146}FUNCTION Newparamglue(n:smallnumber):halfword
C00087 00008 {217}PROCEDURE Printskippar(n:integer)
C00105 00009 {205}PROCEDURE Printmode(m:integer)
C00116 00010 {257}PROCEDURE Newsavelevel(c:groupcode)
C00132 00011 {290}PROCEDURE Showcontext
C00154 00012 {338}PROCEDURE Firmupthelin
C00168 00013 {370}FUNCTION Scankeyword(s:strnumber):boolean
C00183 00014 {403}PROCEDURE Scandimen(mu,inf,shortcut:boolean)
C00201 00015 {434}PROCEDURE Beginname
C00214 00016 {477}PROCEDURE Readfontinfo(u:userfontcode
C00228 00017 {498}PROCEDURE Charwarning(f:internalfont
C00251 00018 {542}PROCEDURE Vlistout
C00259 00019 {551}PROCEDURE Shipout(p:halfword)
C00277 00020 {602}PROCEDURE Showinfo
C00294 00021 {643}PROCEDURE Makefraction(q:halfword)
C00319 00022 {672}PROCEDURE Pushalignmen
C00331 00023 {698}PROCEDURE Doassignment
C00360 00024 {771}PROCEDURE Postlinebrea(finalwidowpe:integer)
C00374 00025 PROCEDURE Linebreak(finalwidowpe:integer)
C00390 00026 {827}PROCEDURE Newhyphexcep
C00413 00027 {882}PROCEDURE Buildpage
C00430 00028 {915}{919}PROCEDURE Missingfont
C00440 00029 {968}PROCEDURE Beginbox
C00450 00030 {999}PROCEDURE Unpackage
C00460 00031 {1027}PROCEDURE Initmath
C00471 00032 {1054}PROCEDURE Mathac
C00485 00033 {1084}PROCEDURE Resumeafterd
C00509 00034 {1155}PROCEDURE Doassignment
C00517 00035 {1181}PROCEDURE Storefmtfile
C00531 00036 {1227}{1228}PROCEDURE Newwhatsit(s:smallnumber
C00540 00037 PROCEDURE Maincontrol
C00554 00038 {1182}{443}FUNCTION Openfmtfile:boolean
C00556 00039 FUNCTION Loadfmtfile:boolean
C00570 00040 {1208}{1212}PROCEDURE Closefilesan
C00578 00041 {1214}PROCEDURE Finalcleanup
C00590 00042 {1217}PROCEDURE Debughelp
C00596 ENDMK
C⊗;
{4}{9}{$C-,A+,D-,W+}{$C+,D+,W+}
PROGRAM Tex;
LABEL
{6}1,9998,9999;
CONST
{11}memmax=20000;
bufsize=500;
errorline=64;
halferrorlin=32;
maxprintline=72;
stacksize=80;
maxinopen=6;
fontmax=75;
badfontcode=300;
fontmemsize=15000;
paramsize=30;
nestsize=40;
maxstrings=3000;
stringvacanc=8000;
poolsize=31000;
alignsize=4;
savesize=300;
triesize=7000;
dvibufsize=800;
filenamesize=23;
poolname='TEX.POOL ';
TYPE
{18}asciicode=0..127;
{25}eightbits=0..255;
alphafile=PACKED FILE OF char;
bytefile=PACKED FILE OF eightbits;
{38}poolpointer=0..poolsize;
strnumber=0..maxstrings;
{96}scaled=integer;
nonnegativei=0..2147483647;
smallnumber=0..63;
{104}glueratio=real;
{108}quarterword=0..255;
halfword=0..65535;
twochoices=1..2;
fourchoices=1..4;
twohalves=PACKED RECORD rh:halfword;
CASE twochoices OF 1:(lh:halfword);
2:(b0:quarterword;
b1:quarterword);
END;
fourquarters=PACKED RECORD b0:quarterword;
b1:quarterword;
b2:quarterword;
b3:quarterword;
END;
memoryword=PACKED RECORD CASE fourchoices OF 1:(int:integer);
2:(gr:glueratio);
3:(hh:twohalves);
4:(qqqq:fourquarters);
END;
wordfile=FILE OF memoryword;
{144}glueord=0..3;
{206}liststaterec=RECORD modefield:-185..185;
headfield,tailfield:halfword;
alreadyfield,auxfield,mlfield:integer;
END;
{252}groupcode=0..17;
{279}instaterecor=RECORD statefield,indexfield:quarterword;
startfield,locfield,limitfield,namefield:halfword;
END;
{467}userfontcode=0..badfontcode;
internalfont=0..fontmax;
{510}dviindex=0..dvibufsize;
packedbytes=PACKED ARRAY[dviindex]OF eightbits;
{814}triepointer=0..triesize;
{819}hyphpointer=0..307;
VAR
{13}bad:integer;
{20}xord:ARRAY[char]OF asciicode;
xchr:ARRAY[asciicode]OF char;
{26}nameoffile:PACKED ARRAY[1..filenamesize]OF char;
namelength:0..filenamesize;
{30}buffer:ARRAY[0..bufsize]OF asciicode;
first:0..bufsize;
last:0..bufsize;
maxbufstack:0..bufsize;
auxbuf:ARRAY[0..70]OF char;
{32}termin:alphafile;
termout:alphafile;
{39}strpool:PACKED ARRAY[poolpointer]OF asciicode;
strstart:ARRAY[strnumber]OF poolpointer;
poolptr:poolpointer;
strptr:strnumber;
{50}poolfile:alphafile;
{54}logfile:alphafile;
selector:0..21;
dig:ARRAY[0..22]OF 0..9;
tally:integer;
termoffset:0..maxprintline;
fileoffset:0..maxprintline;
trickbuf:ARRAY[0..errorline]OF asciicode;
trickcount:integer;
firstcount:integer;
{70}interaction:0..3;
{73}deletionsall:boolean;
spotless:boolean;
errorcount:-1..100;
{76}helpline:ARRAY[0..5]OF strnumber;
helpptr:0..6;
{91}interrupt:integer;
oktointerrup:boolean;
{99}aritherror:boolean;
remainder:scaled;
{110}tempptr:halfword;
{111}mem:ARRAY[0..memmax]OF memoryword;
{112}varused,dynused:integer;
maxvarused:integer;
{113}avail:halfword;
memend:halfword;
{118}rover:halfword;
{159}free:PACKED ARRAY[0..memmax]OF boolean;
wasfree:PACKED ARRAY[0..memmax]OF boolean;
wasmemend:halfword;
panicking:boolean;
{167}fontinshortd:integer;
{175}depththresho:integer;
breadthmax:integer;
{207}nest:ARRAY[0..nestsize]OF liststaterec;
nestptr:0..nestsize;
maxneststack:0..nestsize;
curlist:liststaterec;
shownmode:-185..185;
{231}oldsetting:0..21;
{236}eqtb:ARRAY[1..4279]OF memoryword;
xeqlevel:ARRAY[3584..4279]OF quarterword;
{239}hash:ARRAY[257..2360]OF twohalves;
hashused:halfword;
nonewcontrol:boolean;
csptr:halfword;
cscount:integer;
{254}savestack:ARRAY[0..savesize]OF memoryword;
saveptr:0..savesize;
maxsavestack:0..savesize;
curlevel:quarterword;
curgroup:groupcode;
curboundary:0..savesize;
{267}magset:integer;
{277}curcmd:eightbits;
curchr:halfword;
curtok:halfword;
{280}inputstack:ARRAY[0..stacksize]OF instaterecor;
inputptr:0..stacksize;
maxinstack:0..stacksize;
curinput:instaterecor;
{283}inopen:0..maxinopen;
inputfile:ARRAY[1..maxinopen]OF alphafile;
line:integer;
linestack:ARRAY[0..maxinopen]OF integer;
page:integer;
pagestack:ARRAY[0..maxinopen]OF integer;
{284}scannerstatu:0..4;
warningindex:halfword;
defref:halfword;
{287}paramstack:ARRAY[0..paramsize]OF halfword;
paramptr:0..paramsize;
maxparamstac:integer;
{288}alignstate:integer;
{289}baseptr:0..stacksize;
{311}parloc:halfword;
partoken:halfword;
{344}curmark:ARRAY[0..4]OF halfword;
{349}longstate:94..97;
{350}pstack:ARRAY[0..8]OF halfword;
{372}curval:integer;
curvallevel:0..4;
{394}radix:smallnumber;
{402}curorder:glueord;
{431}curname:strnumber;
curarea:strnumber;
curext:strnumber;
{432}areadelimite:poolpointer;
extdelimiter:poolpointer;
{439}texformatdef:PACKED ARRAY[1..18]OF char;
{447}jobname:strnumber;
{452}dvifile:bytefile;
outputfilena:strnumber;
{458}tfmfile:bytefile;
{468}fontinfo:ARRAY[0..fontmemsize]OF memoryword;
fmemptr:0..fontmemsize;
fontptr:internalfont;
fontcode:ARRAY[internalfont]OF userfontcode;
fontnumber:ARRAY[userfontcode]OF internalfont;
fontcheck:ARRAY[internalfont]OF fourquarters;
fontsize:ARRAY[internalfont]OF scaled;
fontdsize:ARRAY[internalfont]OF scaled;
fontparams:ARRAY[internalfont]OF halfword;
fontname:ARRAY[internalfont]OF strnumber;
fontarea:ARRAY[internalfont]OF strnumber;
fontbc:ARRAY[internalfont]OF eightbits;
fontec:ARRAY[internalfont]OF eightbits;
fontglue:ARRAY[internalfont]OF halfword;
fontused:ARRAY[internalfont]OF boolean;
{469}charbase:ARRAY[internalfont]OF integer;
widthbase:ARRAY[internalfont]OF integer;
heightbase:ARRAY[internalfont]OF integer;
depthbase:ARRAY[internalfont]OF integer;
italicbase:ARRAY[internalfont]OF integer;
ligkernbase:ARRAY[internalfont]OF integer;
kernbase:ARRAY[internalfont]OF integer;
extenbase:ARRAY[internalfont]OF integer;
parambase:ARRAY[internalfont]OF integer;
{472}nullcharacte:fourquarters;
{508}totalpages:integer;
maxv:scaled;
maxh:scaled;
maxpush:integer;
lastbop:integer;
deadcycles:integer;
doingleaders:boolean;
c,f:quarterword;
hd:quarterword;
ruleht,ruledp,rulewd:scaled;
g:halfword;
lq,lr,lx:integer;
{511}dvibuf:packedbytes;
halfbuf:dviindex;
dvilimit:dviindex;
dviptr:dviindex;
dvioffset:integer;
dvigone:integer;
{518}downptr,rightptr:halfword;
{529}dvih,dviv:scaled;
curh,curv:scaled;
dvif:internalfont;
curs:integer;
{559}totalstretch,totalshrink:ARRAY[glueord]OF scaled;
{572}parbeginline:integer;
{594}emptyfield:twohalves;
{625}curmlist:halfword;
curstyle:smallnumber;
cursize:smallnumber;
curmu:scaled;
mlistpenalti:boolean;
{629}curf:internalfont;
curc:quarterword;
curi:fourquarters;
{664}magicoffset:integer;
{670}curalign:halfword;
curspan:halfword;
alignptr:halfword;
{709}justbox:halfword;
{716}passive:halfword;
printhead:halfword;
{718}activewidth:ARRAY[1..6]OF scaled;
curactivewid:ARRAY[1..6]OF scaled;
background:ARRAY[1..6]OF scaled;
breakwidth:ARRAY[1..6]OF scaled;
{720}noshrinkerro:boolean;
{723}curp:halfword;
secondpass:boolean;
threshold:integer;
{728}minimaldemer:ARRAY[0..3]OF scaled;
minimumdemer:scaled;
bestplace:ARRAY[0..3]OF halfword;
bestplline:ARRAY[0..3]OF halfword;
{734}discwidth:scaled;
{742}easyline:halfword;
lastspeciall:halfword;
firstwidth:scaled;
secondwidth:scaled;
firstindent:scaled;
secondindent:scaled;
{766}bestbet:halfword;
fewestdemeri:integer;
bestline:halfword;
actualloosen:integer;
linediff:integer;
{786}hc:ARRAY[0..65]OF halfword;
hn:smallnumber;
ha,hb:halfword;
hf:internalfont;
hu:ARRAY[1..63]OF asciicode;
{794}hyf:ARRAY[0..64]OF 0..9;
{799}hyphenpassed:smallnumber;
{815}trie:ARRAY[triepointer]OF twohalves;
hyfdistance:ARRAY[quarterword]OF smallnumber;
hyfnum:ARRAY[quarterword]OF smallnumber;
hyfnext:ARRAY[quarterword]OF quarterword;
{820}hyphword:ARRAY[hyphpointer]OF strnumber;
hyphlist:ARRAY[hyphpointer]OF halfword;
hyphcount:hyphpointer;
{836}trieophash:ARRAY[0..510]OF quarterword;
trieopptr:quarterword;
{838}triec:ARRAY[triepointer]OF asciicode;
trieo:ARRAY[triepointer]OF quarterword;
triel:ARRAY[triepointer]OF triepointer;
trier:ARRAY[triepointer]OF triepointer;
trieptr:triepointer;
{839}triehash:ARRAY[triepointer]OF triepointer;
{843}trietaken:ARRAY[triepointer]OF boolean;
triemax:triepointer;
triemin:triepointer;
{864}bestheightpl:scaled;
{873}pagetail:halfword;
pagecontents:0..2;
pagesize:scaled;
pagedepthmax:scaled;
bestpagebrea:halfword;
leastpagebad:integer;
bestsize:scaled;
{875}pagesofar:ARRAY[1..6]OF scaled;
curpagedepth:scaled;
lastpageglue:halfword;
inspenalties:integer;
{879}outputactive:boolean;
{963}curbox:halfword;
{1161}errhelpseen:boolean;
{1178}formatident:strnumber;
{1184}fmtfile:wordfile;
{1209}readyalready:integer;
{1221}sendfile:ARRAY[0..15]OF alphafile;
sendopen:ARRAY[0..15]OF boolean;
{1224}sendloc:halfword;
{1253}pseudotypein:strnumber;
PROCEDURE Initialize;
VAR
{19}i:0..127;
{157}k:integer;
{821}z:hyphpointer;
BEGIN{8}{21}
xchr[32]:=' ';
xchr[33]:='!';
xchr[34]:='"';
xchr[35]:='#';
xchr[36]:='$';
xchr[37]:='%';
xchr[38]:='&';
xchr[39]:='''';
xchr[40]:='(';
xchr[41]:=')';
xchr[42]:='*';
xchr[43]:='+';
xchr[44]:=',';
xchr[45]:='-';
xchr[46]:='.';
xchr[47]:='/';
xchr[48]:='0';
xchr[49]:='1';
xchr[50]:='2';
xchr[51]:='3';
xchr[52]:='4';
xchr[53]:='5';
xchr[54]:='6';
xchr[55]:='7';
xchr[56]:='8';
xchr[57]:='9';
xchr[58]:=':';
xchr[59]:=';';
xchr[60]:='<';
xchr[61]:='=';
xchr[62]:='>';
xchr[63]:='?';
xchr[64]:='@';
xchr[65]:='A';
xchr[66]:='B';
xchr[67]:='C';
xchr[68]:='D';
xchr[69]:='E';
xchr[70]:='F';
xchr[71]:='G';
xchr[72]:='H';
xchr[73]:='I';
xchr[74]:='J';
xchr[75]:='K';
xchr[76]:='L';
xchr[77]:='M';
xchr[78]:='N';
xchr[79]:='O';
xchr[80]:='P';
xchr[81]:='Q';
xchr[82]:='R';
xchr[83]:='S';
xchr[84]:='T';
xchr[85]:='U';
xchr[86]:='V';
xchr[87]:='W';
xchr[88]:='X';
xchr[89]:='Y';
xchr[90]:='Z';
xchr[91]:='[';
xchr[92]:='\';
xchr[93]:=']';
xchr[94]:='↑';
xchr[95]:='_';
xchr[96]:='`';
xchr[97]:='a';
xchr[98]:='b';
xchr[99]:='c';
xchr[100]:='d';
xchr[101]:='e';
xchr[102]:='f';
xchr[103]:='g';
xchr[104]:='h';
xchr[105]:='i';
xchr[106]:='j';
xchr[107]:='k';
xchr[108]:='l';
xchr[109]:='m';
xchr[110]:='n';
xchr[111]:='o';
xchr[112]:='p';
xchr[113]:='q';
xchr[114]:='r';
xchr[115]:='s';
xchr[116]:='t';
xchr[117]:='u';
xchr[118]:='v';
xchr[119]:='w';
xchr[120]:='x';
xchr[121]:='y';
xchr[122]:='z';
xchr[123]:='{';
xchr[124]:='|';
xchr[125]:='}';
xchr[126]:='~';
xchr[0]:=' ';
xchr[127]:=' ';
{23} FOR i:=1 TO 31 DO xchr[i]:=Chr(i);
xchr[24]:=Chr(95);
xchr[26]:=Chr(27);
xchr[27]:=Chr(126);
{24}FOR i:=0 TO 127 DO xord[Chr(i)]:=127;
FOR i:=1 TO 126 DO xord[xchr[i]]:=i;
{71}interaction:=3;
{74}deletionsall:=true;
spotless:=true;
errorcount:=0;
{92}interrupt:=0;
oktointerrup:=true;
{160}wasmemend:=0;
panicking:=false;
{209}nestptr:=0;
maxneststack:=0;
curlist.modefield:=1;
curlist.headfield:=10001;
curlist.tailfield:=10001;
curlist.auxfield:=-65536000;
curlist.mlfield:=0;
curlist.alreadyfield:=0;
shownmode:=0;
{881}pagecontents:=0;
pagetail:=10002;
mem[10002].hh.rh:=0;
lastpageglue:=65535;
inspenalties:=0;
curpagedepth:=0;
pagedepthmax:=0;;
{237} FOR k:=3584 TO 4279 DO xeqlevel[k]:=1;
{240}nonewcontrol:=true;
hash[257].lh:=0;
hash[257].rh:=0;
FOR k:=258 TO 2360 DO hash[k]:=hash[257];
{255}saveptr:=0;
curlevel:=1;
curgroup:=0;
curboundary:=0;
maxsavestack:=0;
{268}magset:=0;
{345}curmark[0]:=0;
curmark[1]:=0;
curmark[2]:=0;
curmark[3]:=0;
curmark[4]:=0;
{440}texformatdef:='BASIC.fmt[tex,sys]';
{470}FOR k:=0 TO badfontcode DO fontnumber[k]:=0;
fontptr:=0;
fmemptr:=7;
fontcode[0]:=badfontcode;
fontbc[0]:=1;
fontec[0]:=0;
fontglue[0]:=0;
fontparams[0]:=7;
parambase[0]:=-1;
FOR k:=0 TO 6 DO fontinfo[k].int:=0;
FOR k:=0 TO fontmax DO fontused[k]:=false;
{473}nullcharacte.b0:=0;
nullcharacte.b1:=0;
nullcharacte.b2:=0;
nullcharacte.b3:=0;
{509}totalpages:=0;
maxv:=0;
maxh:=0;
maxpush:=0;
lastbop:=-1;
doingleaders:=false;
deadcycles:=0;
{512}halfbuf:=dvibufsize DIV 2;
dvilimit:=dvibufsize;
dviptr:=0;
dvioffset:=0;
dvigone:=0;
{519}downptr:=0;
rightptr:=0;
{573}parbeginline:=0;
{595}emptyfield.rh:=0;
emptyfield.lh:=0;
{671}alignptr:=0;
curalign:=0;
curspan:=0;
{822}FOR z:=0 TO 307 DO hyphword[z]:=0;
hyphcount:=0;
{880}outputactive:=false;
{1162}errhelpseen:=false;
{1179}formatident:=0;
{1210}readyalready:=314159;
{1222}FOR k:=0 TO 15 DO sendopen[k]:=false;
{1254}pseudotypein:=0;
page:=0;
{158}FOR k:=1 TO 19 DO mem[k].int:=0;
k:=0;
WHILE k<20 DO
BEGIN
mem[k].hh.rh:=1;
mem[k].hh.b0:=0;
mem[k].hh.b1:=0;
k:=k+4;
END;
mem[6].int:=65536;
mem[4].hh.b0:=1;
mem[10].int:=65536;
mem[8].hh.b0:=2;
mem[14].int:=65536;
mem[12].hh.b0:=1;
mem[15].int:=65536;
mem[12].hh.b1:=1;
mem[18].int:=-65536;
mem[16].hh.b0:=1;
rover:=20;
mem[rover].hh.rh:=65535;
mem[rover].hh.lh:=10000-rover;
mem[rover+1].hh.lh:=rover;
mem[rover+1].hh.rh:=rover;
mem[10000].hh.rh:=0;
mem[10000].hh.lh:=0;
FOR k:=10001 TO 10011 DO mem[k]:=mem[10000];
{689}mem[10010].hh.lh:=2304;
{695}mem[10009].hh.rh:=256;
mem[10009].hh.lh:=0;
{715}mem[10006].hh.b0:=1;
mem[10007].hh.lh:=65535;
mem[10006].hh.b1:=0;
{874}mem[10000].hh.b1:=255;
mem[10000].hh.b0:=1;
mem[10000].hh.rh:=10000;
{878}mem[10002].hh.b0:=10;
mem[10002].hh.b1:=0;;
avail:=0;
memend:=10011;
varused:=20;
dynused:=12;
maxvarused:=varused;
{215}eqtb[2361].hh.b0:=92;
eqtb[2361].hh.rh:=0;
eqtb[2361].hh.b1:=0;
FOR k:=1 TO 2360 DO eqtb[k]:=eqtb[2361];
{220}eqtb[2362].hh.rh:=0;
eqtb[2362].hh.b1:=1;
eqtb[2362].hh.b0:=98;
FOR k:=2363 TO 2634 DO eqtb[k]:=eqtb[2362];
mem[0].hh.rh:=mem[0].hh.rh+273;
{223}eqtb[2635].hh.rh:=0;
eqtb[2635].hh.b0:=99;
eqtb[2635].hh.b1:=1;
eqtb[2636]:=eqtb[2361];
eqtb[2637]:=eqtb[2361];
eqtb[2638].hh.rh:=0;
eqtb[2638].hh.b0:=100;
eqtb[2638].hh.b1:=1;
FOR k:=2639 TO 2893 DO eqtb[k]:=eqtb[2638];
eqtb[2894].hh.rh:=0;
eqtb[2894].hh.b0:=101;
eqtb[2894].hh.b1:=1;
FOR k:=2895 TO 2942 DO eqtb[k]:=eqtb[2894];
eqtb[2943].hh.rh:=0;
eqtb[2943].hh.b0:=101;
eqtb[2943].hh.b1:=1;
FOR k:=2944 TO 3583 DO eqtb[k]:=eqtb[2943];
FOR k:=0 TO 127 DO
BEGIN
eqtb[2944+k].hh.rh:=12;
eqtb[3072+k].hh.rh:=k;
eqtb[3456+k].hh.rh:=1000;
END;
eqtb[2957].hh.rh:=5;
eqtb[2976].hh.rh:=10;
eqtb[3036].hh.rh:=0;
eqtb[2956].hh.rh:=5;
eqtb[3071].hh.rh:=15;
eqtb[2944].hh.rh:=9;
FOR k:=65 TO 90 DO
BEGIN
eqtb[2944+k].hh.rh:=11;
eqtb[2944+k+32].hh.rh:=11;
eqtb[3072+k].hh.rh:=k+28928;
eqtb[3072+k+32].hh.rh:=k+28960;
eqtb[3200+k].hh.rh:=k+32;
eqtb[3200+k+32].hh.rh:=k+32;
eqtb[3328+k].hh.rh:=k;
eqtb[3328+k+32].hh.rh:=k;
eqtb[3456+k].hh.rh:=999;
END;
{228}FOR k:=3584 TO 3877 DO eqtb[k].int:=0;
eqtb[3600].int:=1000;
eqtb[3585].int:=10000;
eqtb[3620].int:=25;
FOR k:=0 TO 127 DO eqtb[3878+k].int:=-1;
{235}
FOR k:=4006 TO 4279 DO eqtb[k].int:=0;
{241}hashused:=2357;
cscount:=0;
{845}trieopptr:=0;
trie[0].rh:=0;
trie[0].b1:=0;
trie[0].b0:=0;
FOR k:=1 TO 127 DO trie[k]:=trie[0];
triemax:=127;
{953}hash[2358].rh:=349;
eqtb[2358].hh.b1:=1;
eqtb[2358].hh.b0:=61;
eqtb[2358].hh.rh:=0;
hash[2359].rh:=630;
eqtb[2359].hh.b1:=1;
eqtb[2359].hh.b0:=47;
eqtb[2359].hh.rh:=30;
{1180}formatident:=1022;
{1247}hash[2360].rh:=1058;
eqtb[2360].hh.b1:=1;
eqtb[2360].hh.b0:=96;
eqtb[2360].hh.rh:=0;
END;
{56}PROCEDURE Println;
BEGIN
CASE selector OF
19:BEGIN
Writeln(termout);
Writeln(logfile);
termoffset:=0;
fileoffset:=0;
END;
18:BEGIN
Writeln(logfile);
fileoffset:=0;
END;
17:BEGIN
Writeln(termout);
termoffset:=0;
END;
16,20,21:;
OTHERS:Writeln(sendfile[selector])
END;
END;
{57}
PROCEDURE Printchar(c:asciicode);
BEGIN
CASE selector OF
19:BEGIN
Write(termout,xchr[c]);
Write(logfile,xchr[c]);
termoffset:=termoffset+1;
fileoffset:=fileoffset+1;
IF termoffset=maxprintline THEN
BEGIN
Writeln(termout);
termoffset:=0;
END;
IF fileoffset=maxprintline THEN
BEGIN
Writeln(logfile);
fileoffset:=0;
END;
END;
18:BEGIN
Write(logfile,xchr[c]);
fileoffset:=fileoffset+1;
IF fileoffset=maxprintline THEN
Println;
END;
17:BEGIN
Write(termout,xchr[c]);
termoffset:=termoffset+1;
IF termoffset=maxprintline THEN
Println;
END;
16:;
20:IF tally<trickcount THEN
trickbuf[tally MOD errorline]:=c;
21:BEGIN
IF poolptr<poolsize THEN
BEGIN
strpool[poolptr]:=c;
poolptr:=poolptr+1;
END;
END;
OTHERS:Write(sendfile[selector],xchr[c])
END;
tally:=tally+1;
END;
{58}
PROCEDURE Print(s:integer);
VAR
j:poolpointer;
BEGIN
IF(s<0)OR(s>=strptr)THEN
s:=131;
j:=strstart[s];
WHILE j<strstart[s+1]DO
BEGIN
Printchar(strpool[j]);
j:=j+1;
END;
END;
{60}
PROCEDURE Printnl(s:strnumber);
BEGIN
IF((termoffset>0)AND(Odd(selector)))OR((fileoffset>0)AND(selector
>=18))THEN
Println;
Print(s);
END;
{61}
PROCEDURE Printesc(s:strnumber);
BEGIN
Printchar(92);
Print(s);
END;
{62}
PROCEDURE Printdigs(k:eightbits);
BEGIN
WHILE k>0 DO
BEGIN
k:=k-1;
Printchar(48+dig[k]);
END;
END;
{63}
PROCEDURE Printint(n:integer);
VAR
k:0..20;
m:nonnegativei;
BEGIN
k:=0;
IF n<0 THEN
BEGIN
Printchar(45);
IF n>-100000000 THEN
n:=-n
ELSE
BEGIN
m:=-1-n;
n:=m DIV 10;
m:=(m MOD 10)+1;
k:=1;
IF m<10 THEN
dig[0]:=m
ELSE
BEGIN
dig[0]:=0;
n:=n+1;
END;
END;
END;
REPEAT
dig[k]:=n MOD 10;
n:=n DIV 10;
k:=k+1;
UNTIL n=0;
Printdigs(k);
END;
{245}
PROCEDURE Printcs(p:halfword);
BEGIN
IF p<257 THEN
IF p>=129 THEN
Print(p-129)
ELSE
IF p<1 THEN
Printesc
(317)
ELSE
BEGIN
Printesc(p-1);
IF eqtb[2944+p].hh.rh=11 THEN
Printchar(32);
END
ELSE
IF p>=2361 THEN
Printesc(317)
ELSE
IF hash[p].rh=0 THEN
Printesc
(318)
ELSE
BEGIN
Printesc(hash[p].rh);
Printchar(32);
END;
END;
{437}
PROCEDURE Printfilenam(n,a,e:strnumber);
BEGIN
Print(n);
Print(e);
Print(a);
END;
{606}
PROCEDURE Printsize(s:integer);
BEGIN
IF s=0 THEN
Printesc(636)
ELSE
IF s=16 THEN
Printesc(637)
ELSE
Printesc(638);
END;
{75}
PROCEDURE Gettoken;
FORWARD;
PROCEDURE Terminput;
FORWARD;
PROCEDURE Showcontext;
FORWARD;
PROCEDURE Beginfilerea;
FORWARD;
PROCEDURE Closefilesan;
FORWARD;
PROCEDURE Clearforerro;
FORWARD;
PROCEDURE Debughelp;
FORWARD;
{77}
PROCEDURE Quit;
BEGIN
GOTO 9998;
END;
{78}
PROCEDURE Error;
LABEL
22,10;
VAR
c:asciicode;
s1,s2,s3,s4:integer;
BEGIN
Printchar(46);
Showcontext;
IF interaction=3 THEN
{79}
WHILE true DO
BEGIN
22:
Clearforerro;
BEGIN
Print(135);
Terminput;
END;
IF last=first THEN
GOTO 10;
c:=buffer[first];
IF c>=97 THEN
c:=c-32;
{80}
CASE c OF
49,50,51,52,53,54,55,56,57:IF deletionsall THEN
{84}
BEGIN
s1:=curtok;
s2:=curcmd;
s3:=curchr;
s3:=alignstate;
alignstate:=1000000;
oktointerrup:=false;
IF(last>first+1)AND(buffer[first+1]>=48)AND(buffer[first+1]<=57)THEN
c:=
c*10+buffer[first+1]-48*11
ELSE
c:=c-48;
WHILE c>0 DO
BEGIN
Gettoken;
c:=c-1;
END;
curtok:=s1;
curcmd:=s2;
curchr:=s3;
alignstate:=s4;
oktointerrup:=true;
BEGIN
helpptr:=2;
helpline[1]:=146;
helpline[0]:=147;
END;
Showcontext;
GOTO 22;
END;
68:BEGIN
Debughelp;
GOTO 22;
END;
69,84:IF baseptr>0 THEN
BEGIN
selector:=21;
Print(136);
Print(inputstack[baseptr].namefield);
Printchar(47);
Printint(page);
Print(137);
Printint(line);
Printchar(108);
IF strptr<maxstrings THEN
BEGIN
pseudotypein:=strptr;
strptr:=strptr+1;
strstart[strptr]:=poolptr;
END;
selector:=19;
interaction:=2;
Quit;
END;
72:{85}BEGIN
IF helpptr=0 THEN
BEGIN
helpptr:=2;
helpline[1]:=148;
helpline[0]:=149;
END;
REPEAT
helpptr:=helpptr-1;
Print(helpline[helpptr]);
Println;
UNTIL helpptr=0;
BEGIN
helpptr:=4;
helpline[3]:=150;
helpline[2]:=149;
helpline[1]:=151;
helpline[0]:=152;
END;
GOTO 22;
END;
73:{83}BEGIN
Beginfilerea;
IF last>first+1 THEN
BEGIN
curinput.locfield:=first+1;
buffer[first]:=32;
END
ELSE
BEGIN
BEGIN
Print(145);
Terminput;
END;
curinput.locfield:=first;
END;
first:=last;
curinput.limitfield:=last-1;
GOTO 10;
END;
81,82,83:{82}BEGIN
errorcount:=0;
interaction:=0+c-81;
IF c=81 THEN
selector:=selector-1;
Println;
GOTO 10;
END;
88:BEGIN
BEGIN
Print(138);
Terminput;
END;
IF(last>first)AND((buffer[first]=120)OR(buffer[first]=88))THEN
BEGIN
interaction:=2;
Quit;
END;
END;
OTHERS:
END;
{81}Print(139);
Printnl(140);
Printnl(141);
IF baseptr>0 THEN
Print(142);
IF deletionsall THEN
Printnl(143);
Printnl(144);
END;
errorcount:=errorcount+1;
IF errorcount=100 THEN
BEGIN
Printnl(134);
Quit;
END;
{86}
IF interaction>0 THEN
selector:=selector-1;
WHILE helpptr>0 DO
BEGIN
helpptr:=helpptr-1;
Printnl(helpline[helpptr]);
END;
Println;
IF interaction>0 THEN
selector:=selector+1;
Println;
10:
END;
{88}
PROCEDURE Fatalerror(s:strnumber);
BEGIN
Printnl(154);
BEGIN
helpptr:=1;
helpline[0]:=s;
END;
BEGIN
IF interaction=3 THEN
interaction:=2;
Error;
IF interaction>0 THEN
Debughelp;
Quit;
END;
END;
{89}
PROCEDURE Overflow(s:strnumber;
n:integer);
BEGIN
Printnl(155);
Print(s);
Printchar(61);
Printint(n);
Printchar(93);
BEGIN
helpptr:=2;
helpline[1]:=156;
helpline[0]:=157;
END;
BEGIN
IF interaction=3 THEN
interaction:=2;
Error;
IF interaction>0 THEN
Debughelp;
Quit;
END;
END;
{90}
PROCEDURE Confusion(s:strnumber);
BEGIN
selector:=19;
IF spotless THEN
BEGIN
Printnl(158);
Print(s);
Printchar(41);
BEGIN
helpptr:=1;
helpline[0]:=159;
END;
END
ELSE
BEGIN
Printnl(160);
BEGIN
helpptr:=2;
helpline[1]:=161;
helpline[0]:=162;
END;
END;
BEGIN
IF interaction=3 THEN
interaction:=2;
Error;
IF interaction>0 THEN
Debughelp;
Quit;
END;
END;
{27}
FUNCTION Aopenin(VAR f:alphafile):boolean;
BEGIN
Reset(f,nameoffile,'/E/O/N:19');
Aopenin:=NOT Eof(f);
END;
FUNCTION Aopenout(VAR f:alphafile):boolean;
BEGIN
Rewrite(f,nameoffile,'/O');
Aopenout:=Eof(f);
END;
FUNCTION Bopenin(VAR f:bytefile):boolean;
BEGIN
Reset(f,nameoffile,'/B:8/O/N:19');
Bopenin:=NOT Eof(f);
END;
FUNCTION Bopenout(VAR f:bytefile):boolean;
BEGIN
Rewrite(f,nameoffile,'/O/N:19');
Bopenout:=Eof(f);
END;
FUNCTION Wopenin(VAR f:wordfile):boolean;
BEGIN
Reset(f,nameoffile,'/O/N:19');
Wopenin:=NOT Eof(f);
END;
FUNCTION Wopenout(VAR f:wordfile):boolean;
BEGIN
Rewrite(f,nameoffile,'/O/N:19');
Wopenout:=Eof(f);
END;
{28}PROCEDURE Aclose(VAR f:alphafile);
BEGIN
close(f);
END;
PROCEDURE Bclose(VAR f:bytefile);
BEGIN
close(f);
END;
PROCEDURE Wclose(VAR f:wordfile);
BEGIN
close(f);
END;
{31}
FUNCTION Inputln(VAR f:alphafile):boolean;
LABEL
1;
VAR
n:integer;
k,m:0..bufsize;
BEGIN
Get(f);
IF f↑=Chr(10)THEN
Get(f);
IF Eof(f)THEN
Inputln:=false
ELSE
BEGIN
last:=first;
Read(f,auxbuf:n);
IF buffer[first]=12 THEN
BEGIN
page:=page+1;
line:=1;
END;
1:
IF last+n>maxbufstack THEN
IF last+n>=bufsize THEN
BEGIN
maxbufstack:=
bufsize;
Overflow(128,bufsize);
END
ELSE
maxbufstack:=last+n;
IF n>0 THEN
BEGIN
m:=last;
IF n=72 THEN
last:=m+71
ELSE
last:=m+n;
FOR k:=m TO last-1 DO buffer[k]:=xord[auxbuf[k-m]];
IF n=72 THEN
BEGIN
Read(f,auxbuf:n);
GOTO 1;
END;
END
ELSE
IF f↑=Chr(12)THEN
BEGIN
auxbuf[0]:=f↑;
n:=1;
GOTO 1;
END;
Inputln:=true;
END;
END;
{37}
PROCEDURE Esci(VAR x:integer);
EXTERN;
FUNCTION Rescan:boolean;
EXTERN;
PROCEDURE Ptldch(c:char);
EXTERN;
PROCEDURE Ptldbk(i:integer);
EXTERN;
PROCEDURE Ptldln;
EXTERN;
FUNCTION Initterminal:boolean;
LABEL
10;
BEGIN
Reset(termin,'TTY:','/O/I');
Esci(interrupt);
IF false THEN
IF Rescan THEN
line:=999;
WHILE true DO
BEGIN
buffer[first]:=0;
IF line<>999 THEN
BEGIN
Write(termout,'**');
Break(termout);
END;
IF NOT Inputln(termin)THEN
BEGIN
Writeln(termout);
Write(termout,'! End of file on the terminal... why?');
Initterminal:=false;
GOTO 10;
END;
curinput.locfield:=first;
IF line=999 THEN
BEGIN
WHILE(curinput.locfield<last)AND(buffer[curinput.
locfield]<>120)AND(buffer[curinput.locfield]<>88)DO curinput.locfield:=
curinput.locfield+1;
IF curinput.locfield<last THEN
curinput.locfield:=curinput.locfield+1;
IF(curinput.locfield<last)AND(buffer[curinput.locfield]=59)THEN
curinput
.locfield:=curinput.locfield+1;
END;
WHILE(curinput.locfield<last)AND(buffer[curinput.locfield]=32)DO
curinput.locfield:=curinput.locfield+1;
IF curinput.locfield<last THEN
BEGIN
Initterminal:=true;
GOTO 10;
END;
Writeln(termout,'Please type the name of your input file.');
line:=0;
END;
10:
END;
{43}
FUNCTION Makestring:strnumber;
BEGIN
IF strptr=maxstrings THEN
Overflow(130,maxstrings);
strptr:=strptr+1;
strstart[strptr]:=poolptr;
Makestring:=strptr-1;
END;
{45}
FUNCTION Streqbuf(s:strnumber;
k:integer):boolean;
LABEL
45;
VAR
j:poolpointer;
result:boolean;
BEGIN
j:=strstart[s];
result:=false;
WHILE j<strstart[s+1]DO
BEGIN
IF strpool[j]<>buffer[k]THEN
GOTO 45;
j:=j+1;
k:=k+1;
END;
result:=true;
45:
Streqbuf:=result;
END;
{46}
FUNCTION Streqstr(s,t:strnumber):boolean;
LABEL
45;
VAR
j,k:poolpointer;
result:boolean;
BEGIN
result:=false;
IF(strstart[s+1]-strstart[s])<>(strstart[t+1]-strstart[t])THEN
GOTO 45;
j:=strstart[s];
k:=strstart[t];
WHILE j<strstart[s+1]DO
BEGIN
IF strpool[j]<>strpool[k]THEN
GOTO 45;
j:=j+1;
k:=k+1;
END;
result:=true;
45:
Streqstr:=result;
END;
{47}
FUNCTION Initstrings:boolean;
LABEL
30,10;
VAR
k,l:0..127;
m,n:char;
g:strnumber;
a:integer;
c:boolean;
BEGIN
poolptr:=0;
strptr:=0;
{48}
FOR k:=0 TO 127 DO
BEGIN
IF(k<32)AND({49}k IN[0,9..13,27])THEN
BEGIN
BEGIN
strpool[poolptr]:=94;
poolptr:=poolptr+1;
END;
BEGIN
strpool[poolptr]:=94;
poolptr:=poolptr+1;
END;
BEGIN
strpool[poolptr]:=k+64;
poolptr:=poolptr+1;
END;
END
ELSE
IF k=127 THEN
BEGIN
BEGIN
strpool[poolptr]:=94;
poolptr:=poolptr+1;
END;
BEGIN
strpool[poolptr]:=94;
poolptr:=poolptr+1;
END;
BEGIN
strpool[poolptr]:=63;
poolptr:=poolptr+1;
END;
END
ELSE
BEGIN
strpool[poolptr]:=k;
poolptr:=poolptr+1;
END;
g:=Makestring;
END;
{51}nameoffile:=poolname;
IF Aopenin(poolfile)THEN
BEGIN
c:=false;
REPEAT{52}
BEGIN
IF Eof(poolfile)THEN
BEGIN
Writeln(termout,
'! TEX.POOL has no check sum.');
Initstrings:=false;
GOTO 10;
END;
Read(poolfile,m,n);
IF m='*'THEN
{53}
BEGIN
a:=0;
k:=1;
WHILE true DO
BEGIN
IF(xord[n]<48)OR(xord[n]>57)THEN
BEGIN
Writeln(
termout,'! TEX.POOL check sum doesn''t have nine digits.');
Initstrings:=false;
GOTO 10;
END;
a:=10*a+xord[n]-48;
IF k=9 THEN
GOTO 30;
k:=k+1;
Read(poolfile,n);
END;
30:
IF a<>404035012 THEN
BEGIN
Writeln(termout,
'! TEX.POOL doesn''t match; TANGLE me again.');
Initstrings:=false;
GOTO 10;
END;
c:=true;
END
ELSE
BEGIN
IF(xord[m]<48)OR(xord[m]>57)OR(xord[n]<48)OR(xord[n]>57)
THEN
BEGIN
Writeln(termout,
'! TEX.POOL line doesn''t begin with two digits.');
Initstrings:=false;
GOTO 10;
END;
l:=xord[m]*10+xord[n]-48*11;
IF poolptr+l+stringvacanc>poolsize THEN
BEGIN
Writeln(termout,
'! You have to increase POOLSIZE.');
Initstrings:=false;
GOTO 10;
END;
FOR k:=1 TO l DO
BEGIN
IF Eoln(poolfile)THEN
BEGIN
Writeln(termout,
'! TEX.POOL line too short.');
Initstrings:=false;
GOTO 10;
END;
Read(poolfile,m);
BEGIN
strpool[poolptr]:=xord[m];
poolptr:=poolptr+1;
END;
END;
Readln(poolfile);
g:=Makestring;
END;
END;
UNTIL c;
Initstrings:=true;
END
ELSE
BEGIN
Writeln(termout,'! I can''t read TEX.POOL.');
Initstrings:=false;
GOTO 10;
END;
10:
END;
{64}
PROCEDURE Printoctal(n:integer);
VAR
k:0..22;
BEGIN
k:=0;
Printchar(39);
REPEAT
dig[k]:=n MOD 8;
n:=n DIV 8;
k:=k+1;
UNTIL n=0;
Printdigs(k);
END;
{65}
PROCEDURE Printascii(c:integer);
BEGIN
IF(c>32)AND(c<=126)THEN
Printchar(c)
ELSE
BEGIN
IF c<0 THEN
Printchar(45);
Printoctal(Abs(c));
Printchar(32);
END;
END;
{66}
PROCEDURE Printromanin(n:nonnegativei);
LABEL
10;
VAR
j,k:poolpointer;
u,v:nonnegativei;
BEGIN
j:=strstart[132];
v:=1000;
WHILE true DO
BEGIN
WHILE n>=v DO
BEGIN
Printchar(strpool[j]);
n:=n-v;
END;
IF n=0 THEN
GOTO 10;
k:=j+2;
u:=v DIV(strpool[k-1]-48);
IF strpool[k-1]=50 THEN
BEGIN
k:=k+2;
u:=u DIV(strpool[k-1]-48);
END;
IF n+u>=v THEN
BEGIN
Printchar(strpool[k]);
n:=n+u;
END
ELSE
BEGIN
j:=j+2;
v:=v DIV(strpool[j-1]-48);
END;
END;
10:
END;
{67}
PROCEDURE Printcurrent;
VAR
j:poolpointer;
BEGIN
j:=strstart[strptr];
WHILE j<poolptr DO
BEGIN
Printchar(strpool[j]);
j:=j+1;
END;
END;
{68}
PROCEDURE Terminput;
VAR
k:0..bufsize;
BEGIN
Break(termout);
buffer[first]:=0;
IF NOT Inputln(termin)THEN
Fatalerror(133);
selector:=selector-1;
IF last<>first THEN
FOR k:=first TO last-1 DO Print(buffer[k]);
Println;
selector:=selector+1;
END;
{87}
PROCEDURE Interror(n:integer);
BEGIN
Print(153);
Printint(n);
Printchar(41);
Error;
END;
{93}
PROCEDURE Pauseforinst;
BEGIN
IF oktointerrup THEN
BEGIN
interaction:=3;
IF(selector=18)OR(selector=16)THEN
selector:=selector+1;
Printnl(163);
BEGIN
helpptr:=3;
helpline[2]:=164;
helpline[1]:=165;
helpline[0]:=166;
END;
deletionsall:=false;
Error;
deletionsall:=true;
interrupt:=0;
END;
END;
{95}
FUNCTION Half(x:integer):integer;
BEGIN
IF Odd(x)THEN
Half:=(x+1)DIV 2
ELSE
Half:=x DIV 2;
END;
{97}
FUNCTION Rounddecimal(k:smallnumber):scaled;
VAR
a:integer;
BEGIN
a:=0;
WHILE k>0 DO
BEGIN
k:=k-1;
a:=(a+dig[k]*131072)DIV 10;
END;
Rounddecimal:=(a+1)DIV 2;
END;
{98}
PROCEDURE Printscaled(s:scaled);
VAR
k:0..4;
BEGIN
IF s<0 THEN
BEGIN
Printchar(45);
s:=-s;
END;
Printint(s DIV 65536);
s:=((s MOD 65536)*3125+1024)DIV 2048;
Printchar(46);
REPEAT
Printchar(48+(s DIV 10000));
s:=10*(s MOD 10000);
UNTIL s=0;
END;
{100}
FUNCTION Nxplusy(n:integer;
x,y:scaled):scaled;
BEGIN
IF n<0 THEN
BEGIN
x:=-x;
n:=-n;
END;
IF n=0 THEN
Nxplusy:=y
ELSE
IF((x<=(1073741823-y)DIV n)AND(-x<=(
1073741823+y)DIV n))THEN
Nxplusy:=n*x+y
ELSE
BEGIN
aritherror:=true;
Nxplusy:=0;
END;
END;
{101}
FUNCTION Xovern(x:scaled;
n:integer):scaled;
VAR
negate:boolean;
BEGIN
negate:=false;
IF n=0 THEN
BEGIN
aritherror:=true;
Xovern:=0;
remainder:=x;
END
ELSE
BEGIN
IF n<0 THEN
BEGIN
x:=-x;
n:=-n;
negate:=true;
END;
IF x>=0 THEN
BEGIN
Xovern:=x DIV n;
remainder:=x MOD n;
END
ELSE
BEGIN
Xovern:=-((-x)DIV n);
remainder:=-((-x)MOD n);
END;
END;
IF negate THEN
remainder:=-remainder;
END;
{102}
FUNCTION Xnoverd(x:scaled;
n,d:integer):scaled;
VAR
positive:boolean;
t,u,v:nonnegativei;
BEGIN
IF x>=0 THEN
positive:=true
ELSE
BEGIN
x:=-x;
positive:=false;
END;
t:=(x MOD 32768)*n;
u:=(x DIV 32768)*n+(t DIV 32768);
v:=(u MOD d)*32768+(t MOD 32768);
IF u DIV d>=32768 THEN
aritherror:=true
ELSE
u:=32768*(u DIV d)+(v DIV d
);
IF positive THEN
BEGIN
Xnoverd:=u;
remainder:=v MOD d;
END
ELSE
BEGIN
Xnoverd:=-u;
remainder:=-(v MOD d);
END;
END;
{103}
FUNCTION Badness(t,s:scaled):halfword;
VAR
r:integer;
BEGIN
IF t=0 THEN
Badness:=0
ELSE
IF s<=0 THEN
Badness:=10000
ELSE
BEGIN
IF t<=7230584 THEN
r:=(t*297)DIV s
ELSE
IF s>=1663497 THEN
r:=t DIV(s
DIV 297)
ELSE
r:=t;
IF r>1290 THEN
Badness:=10000
ELSE
Badness:=(r*r*r+131072)DIV 262144;
END;
END;
{109}PROCEDURE Printmemoryw(w:memoryword);
BEGIN
Printint(w.int);
Printchar(32);
Printscaled(w.int);
Printchar(32);
Printscaled(Round(65536*w.gr));
Println;
Printint(w.hh.lh);
Printchar(61);
Printint(w.hh.b0);
Printchar(58);
Printint(w.hh.b1);
Printchar(59);
Printint(w.hh.rh);
Printchar(32);
Printint(w.qqqq.b0);
Printchar(58);
Printint(w.qqqq.b1);
Printchar(58);
Printint(w.qqqq.b2);
Printchar(58);
Printint(w.qqqq.b3);
END;
{114}{273}
PROCEDURE Showtokenlis(p,q:integer;
l:integer);
LABEL
10;
VAR
m,c:integer;
matchchr:asciicode;
n:asciicode;
BEGIN
matchchr:=35;
n:=48;
tally:=0;
WHILE(p<>0)AND(tally<l)DO
BEGIN
IF p=q THEN
{299}
BEGIN
firstcount:=tally;
trickcount:=tally+1+errorline-halferrorlin;
IF trickcount<errorline THEN
trickcount:=errorline;
END;
{274}
IF(p<10000)OR(p>memend)THEN
BEGIN
Printesc(178);
GOTO 10;
END;
IF mem[p].hh.lh>=4096 THEN
Printcs(mem[p].hh.lh-4096)
ELSE
BEGIN
m:=mem[p
].hh.lh DIV 256;
c:=mem[p].hh.lh MOD 256;
IF(mem[p].hh.lh<0)OR(c>127)THEN
Printesc(361)
ELSE
{275}
CASE m OF
2,3,4,7,
8,10,11,12:Print(c);
1:BEGIN
IF(mem[p].hh.rh>=10000)AND(mem[p].hh.rh<=memend)THEN
IF mem[mem[
p].hh.rh].hh.lh DIV 256=14 THEN
Print(matchchr);
Print(c);
END;
9:Printesc(362);
6:BEGIN
Print(c);
Print(c);
END;
5:BEGIN
Print(matchchr);
IF c<=9 THEN
Printchar(c+48)
ELSE
BEGIN
Printchar(33);
GOTO 10;
END;
END;
13:BEGIN
matchchr:=c;
Print(c);
n:=n+1;
Printchar(n);
IF n>57 THEN
GOTO 10;
END;
14:Print(363);
OTHERS:Printesc(361)
END;
END;
p:=mem[p].hh.rh;
END;
IF p<>0 THEN
Printesc(360);
10:
END;
{285}
PROCEDURE Runaway;
VAR
p:halfword;
BEGIN
IF scannerstatu>1 THEN
BEGIN
Printnl(379);
CASE scannerstatu OF
2:BEGIN
Print(380);
p:=defref;
END;
3:BEGIN
Print(381);
p:=10003;
END;
4:BEGIN
Print(382);
p:=10004;
END;
END;
Println;
Showtokenlis(mem[p].hh.rh,0,errorline-10);
END;
END;
{115}
FUNCTION Getavail:halfword;
VAR
p:halfword;
BEGIN
p:=avail;
IF p<>0 THEN
avail:=mem[avail].hh.rh
ELSE
IF memend<memmax THEN
BEGIN
memend:=memend+1;
p:=memend;
END
ELSE
BEGIN
Runaway;
Overflow(167,memmax-0);
END;
mem[p].hh.rh:=0;
dynused:=dynused+1;
Getavail:=p;
END;
{117}
PROCEDURE Flushlist(p:halfword);
VAR
q:halfword;
BEGIN
WHILE p<>0 DO
BEGIN
q:=mem[p].hh.rh;
BEGIN
mem[p].hh.rh:=avail;
avail:=p;
dynused:=dynused-1;
END;
p:=q;
END;
END;
{119}
FUNCTION Getnode(s:integer):halfword;
LABEL
40,10;
VAR
p:halfword;
q:halfword;
r:integer;
BEGIN
p:=rover;
REPEAT{121}
q:=p+mem[p].hh.lh;
WHILE(mem[q].hh.rh=65535)DO
BEGIN
IF q=rover THEN
rover:=mem[q+1].hh.rh;
mem[mem[q+1].hh.rh+1].hh.lh:=mem[q+1].hh.lh;
mem[mem[q+1].hh.lh+1].hh.rh:=mem[q+1].hh.rh;
q:=q+mem[q].hh.lh;
END;
r:=q-s;
IF r>p+1 THEN
{122}
BEGIN
mem[p].hh.lh:=r-p;
rover:=p;
GOTO 40;
END;
IF(r=p)AND((mem[p+1].hh.rh<>rover)OR(mem[p+1].hh.lh<>rover))THEN
{123}
BEGIN
IF p=rover THEN
rover:=mem[p+1].hh.rh;
mem[mem[p+1].hh.rh+1].hh.lh:=mem[p+1].hh.lh;
mem[mem[p+1].hh.lh+1].hh.rh:=mem[p+1].hh.rh;
rover:=mem[p+1].hh.rh;
GOTO 40;
END;
mem[p].hh.lh:=q-p;
p:=mem[p+1].hh.rh;
UNTIL p=rover;
IF s=1073741824 THEN
BEGIN
Getnode:=65535;
GOTO 10;
END;
Overflow(168,10000);
40:
mem[r].hh.rh:=0;
varused:=varused+s;
IF varused>maxvarused THEN
maxvarused:=varused;
Getnode:=r;
10:
END;
{124}
PROCEDURE Freenode(p:halfword;
s:halfword);
VAR
q:halfword;
BEGIN
IF{156}(p<20)OR(p>=10000)THEN
Confusion(169);
mem[p].hh.lh:=s;
mem[p].hh.rh:=65535;
q:=mem[rover+1].hh.lh;
mem[p+1].hh.lh:=q;
mem[p+1].hh.rh:=rover;
mem[rover+1].hh.lh:=p;
mem[q+1].hh.rh:=p;
varused:=varused-s;
END;
{125}
PROCEDURE Sortavail;
VAR
p,q,r:halfword;
oldrover:halfword;
BEGIN
p:=Getnode(1073741824);
p:=mem[rover+1].hh.rh;
mem[rover+1].hh.rh:=65535;
oldrover:=rover;
WHILE p<>oldrover DO{126}
IF p<rover THEN
BEGIN
q:=p;
p:=mem[q+1].hh.rh;
mem[q+1].hh.rh:=rover;
rover:=q;
END
ELSE
BEGIN
q:=rover;
WHILE mem[q+1].hh.rh<p DO q:=mem[q+1].hh.rh;
r:=mem[p+1].hh.rh;
mem[p+1].hh.rh:=mem[q+1].hh.rh;
mem[q+1].hh.rh:=p;
p:=r;
END;
p:=rover;
WHILE mem[p+1].hh.rh<>65535 DO
BEGIN
mem[mem[p+1].hh.rh+1].hh.lh:=p;
p:=mem[p+1].hh.rh;
END;
mem[p+1].hh.rh:=rover;
mem[rover+1].hh.lh:=p;
END;
{130}
FUNCTION Newnullbox:halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(7);
mem[p].hh.b0:=0;
mem[p].hh.b1:=0;
mem[p+1].int:=0;
mem[p+2].int:=0;
mem[p+3].int:=0;
mem[p+4].int:=0;
mem[p+5].hh.rh:=0;
mem[p+5].hh.b0:=0;
mem[p+5].hh.b1:=0;
mem[p+6].gr:=0.0;
Newnullbox:=p;
END;
{133}
FUNCTION Newrule:halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(4);
mem[p].hh.b0:=2;
mem[p].hh.b1:=0;
mem[p+1].int:=-1073741824;
mem[p+2].int:=-1073741824;
mem[p+3].int:=-1073741824;
Newrule:=p;
END;
{138}
FUNCTION Newligature(f,c:quarterword;
q:halfword):halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=6;
mem[p].hh.b1:=0;
mem[p+1].hh.b0:=f;
mem[p+1].hh.b1:=c;
mem[p+1].hh.rh:=q;
Newligature:=p;
END;
{139}
FUNCTION Newdisc:halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=7;
mem[p].hh.b1:=0;
mem[p+1].hh.lh:=0;
mem[p+1].hh.rh:=0;
Newdisc:=p;
END;
{141}
FUNCTION Newmath(w:scaled;
s:smallnumber):halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=9;
mem[p].hh.b1:=s;
mem[p+1].int:=w;
Newmath:=p;
END;
{145}
FUNCTION Newspec(p:halfword):halfword;
VAR
q:halfword;
BEGIN
q:=Getnode(4);
mem[q]:=mem[p];
mem[q].hh.rh:=0;
mem[q+1].int:=mem[p+1].int;
mem[q+2].int:=mem[p+2].int;
mem[q+3].int:=mem[p+3].int;
Newspec:=q;
END;
{146}FUNCTION Newparamglue(n:smallnumber):halfword;
VAR
p:halfword;
q:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=10;
mem[p].hh.b1:=n+1;
mem[p+1].hh.rh:=0;
q:={216}eqtb[2362+n].hh.rh;
mem[p+1].hh.lh:=q;
mem[q].hh.rh:=mem[q].hh.rh+1;
Newparamglue:=p;
END;
{147}
FUNCTION Newglue(q:halfword):halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=10;
mem[p].hh.b1:=0;
mem[p+1].hh.rh:=0;
mem[p+1].hh.lh:=q;
mem[q].hh.rh:=mem[q].hh.rh+1;
Newglue:=p;
END;
{148}
FUNCTION Newskipparam(n:smallnumber):halfword;
VAR
p:halfword;
BEGIN
tempptr:=Newspec({216}eqtb[2362+n].hh.rh);
p:=Newglue(tempptr);
mem[tempptr].hh.rh:=0;
mem[p].hh.b1:=n+1;
Newskipparam:=p;
END;
{150}
FUNCTION Newkern(w:scaled):halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=11;
mem[p].hh.b1:=0;
mem[p+1].int:=w;
Newkern:=p;
END;
{152}
FUNCTION Newpenalty(m:integer):halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=12;
mem[p].hh.b1:=0;
mem[p+1].int:=m;
Newpenalty:=p;
END;
{161}
PROCEDURE Checkmem(printlocs:boolean);
LABEL
31,32;
VAR
p,q:halfword;
clobbered:boolean;
BEGIN
FOR p:=0 TO memend DO free[p]:=false;
{162}p:=avail;
q:=0;
clobbered:=false;
WHILE p<>0 DO
BEGIN
IF(p>memend)OR(p<10012)THEN
clobbered:=true
ELSE
IF
free[p]THEN
clobbered:=true;
IF clobbered THEN
BEGIN
Printnl(170);
Printint(q);
GOTO 31;
END;
free[p]:=true;
q:=p;
p:=mem[q].hh.rh;
END;
31:;
{163}p:=rover;
q:=0;
clobbered:=false;
REPEAT
IF(p>=10000)OR(p<20)THEN
clobbered:=true
ELSE
IF(mem[p+1].hh.rh>=
10000)OR(mem[p+1].hh.rh<20)THEN
clobbered:=true
ELSE
IF NOT((mem[p].hh.
rh=65535))OR(mem[p].hh.lh<2)OR(p+mem[p].hh.lh>10000)OR(mem[mem[p+1].hh.
rh+1].hh.lh<>p)THEN
clobbered:=true;
IF clobbered THEN
BEGIN
Printnl(171);
Printint(q);
GOTO 32;
END;
FOR q:=p TO p+mem[p].hh.lh-1 DO
BEGIN
IF free[q]THEN
BEGIN
Printnl(172);
Printint(q);
GOTO 32;
END;
free[q]:=true;
END;
q:=p;
p:=mem[p+1].hh.rh;
UNTIL p=rover;
32:;
{164}p:=0;
WHILE p<=10000 DO
BEGIN
IF(mem[p].hh.rh=65535)THEN
BEGIN
Printnl(173);
Printint(p);
END;
WHILE(p<=10000)AND NOT free[p]DO p:=p+1;
WHILE(p<=10000)AND free[p]DO p:=p+1;
END;
IF printlocs THEN
{165}
BEGIN
Printnl(174);
FOR p:=0 TO memend DO
IF NOT free[p]AND((p>wasmemend)OR wasfree[p])THEN
BEGIN
Printchar(32);
Printint(p);
END;
END;
FOR p:=0 TO memend DO wasfree[p]:=free[p];
wasmemend:=memend;
END;
{166}
PROCEDURE Searchmem(p:halfword);
VAR
q:halfword;
BEGIN
FOR q:=0 TO memend DO
BEGIN
IF mem[q].hh.rh=p THEN
BEGIN
Printnl(
175);
Printint(q);
Printchar(41);
END;
IF mem[q].hh.lh=p THEN
BEGIN
Printnl(176);
Printint(q);
Printchar(41);
END;
END;
{238}
FOR q:=1 TO 2893 DO
BEGIN
IF eqtb[q].hh.rh=p THEN
BEGIN
Printnl(315
);
Printint(q);
Printchar(41);
END;
END;
END;
{168}
PROCEDURE Shortdisplay(p:integer);
VAR
n:integer;
BEGIN
WHILE p>0 DO
BEGIN
IF(p>10000)THEN
BEGIN
IF p<=memend THEN
BEGIN
IF mem[p].hh.b0<>fontinshortd THEN
BEGIN
Printesc(58);
IF(mem[p].hh.b0<0)OR(mem[p].hh.b0>fontmax)THEN
Printchar(42)
ELSE
Printint(fontcode[mem[p].hh.b0]);
Printchar(32);
fontinshortd:=mem[p].hh.b0;
END;
Printascii(mem[p].hh.b1);
END;
END
ELSE
{169}
CASE mem[p].hh.b0 OF
0,1,3,8,4,5,13:Print(177);
2:Printchar(124);
10:IF mem[p+1].hh.lh<>0 THEN
Printchar(32);
9:Printchar(36);
6:Shortdisplay(mem[p+1].hh.rh);
7:BEGIN
Shortdisplay(mem[p+1].hh.lh);
Shortdisplay(mem[p+1].hh.rh);
n:=mem[p].hh.b1;
WHILE n>0 DO
BEGIN
p:=mem[p].hh.rh;
n:=n-1;
END;
END;
OTHERS:
END;
p:=mem[p].hh.rh;
END;
END;
{170}
PROCEDURE Printfontand(p:integer);
BEGIN
IF p>memend THEN
Printesc(178)
ELSE
BEGIN
Printesc(58);
IF(mem[p].hh.b0<0)OR(mem[p].hh.b0>fontmax)THEN
Printchar(42)
ELSE
Printint(fontcode[mem[p].hh.b0]);
Printchar(32);
Printascii(mem[p].hh.b1);
END;
END;
PROCEDURE Printmark(p:integer);
BEGIN
Printchar(123);
IF(p<10000)OR(p>memend)THEN
Printesc(178)
ELSE
Showtokenlis(mem[p].hh.rh,
0,maxprintline-10);
Printchar(125);
END;
PROCEDURE Printruledim(d:scaled);
BEGIN
IF(d=-1073741824)THEN
Printchar(42)
ELSE
Printscaled(d);
END;
{171}
PROCEDURE Printglue(d:scaled;
order:integer;
s:strnumber);
BEGIN
Printscaled(d);
IF(order<0)OR(order>3)THEN
Print(179)
ELSE
IF order>0 THEN
BEGIN
Print(
180);
WHILE order>1 DO
BEGIN
Printchar(108);
order:=order-1;
END;
END
ELSE
IF s<>0 THEN
Print(s);
END;
{172}
PROCEDURE Printspec(p:halfword;
s:strnumber);
BEGIN
IF(p<0)OR(p>=10000)THEN
Printchar(42)
ELSE
BEGIN
Printscaled(mem[p
+1].int);
IF s<>0 THEN
Print(s);
IF mem[p+2].int<>0 THEN
BEGIN
Print(181);
Printglue(mem[p+2].int,mem[p].hh.b0,s);
END;
IF mem[p+3].int<>0 THEN
BEGIN
Print(182);
Printglue(mem[p+3].int,mem[p].hh.b1,s);
END;
END;
END;
{173}{600}
PROCEDURE Printfamandc(p:halfword);
BEGIN
Printesc(326);
Printint(mem[p].hh.b0);
Printchar(32);
Printascii(mem[p].hh.b1);
END;
PROCEDURE Printdelimit(p:halfword);
VAR
a:integer;
BEGIN
a:=mem[p].qqqq.b0*256+mem[p].qqqq.b1;
a:=a*4096+mem[p].qqqq.b2*256+mem[p].qqqq.b3;
IF a<0 THEN
Printint(a)
ELSE
Printoctal(a);
END;
{601}
PROCEDURE Showinfo;
FORWARD;
PROCEDURE Printsubsidi(p:halfword;
c:asciicode);
BEGIN
IF(poolptr-strstart[strptr])<depththresho THEN
BEGIN
BEGIN
strpool
[poolptr]:=c;
poolptr:=poolptr+1;
END;
tempptr:=p;
CASE mem[p].hh.rh OF
1:BEGIN
Println;
Printcurrent;
Printfamandc(p);
END;
2:Showinfo;
3:IF mem[p].hh.lh=0 THEN
BEGIN
Println;
Printcurrent;
Print(613);
END
ELSE
Showinfo;
OTHERS:
END;
poolptr:=poolptr-1;
END;
END;
{603}
PROCEDURE Printstyle(c:integer);
BEGIN
CASE c DIV 2 OF
0:Printesc(614);
1:Printesc(615);
2:Printesc(616);
3:Printesc(617);
OTHERS:Print(618)
END;
END;
{217}PROCEDURE Printskippar(n:integer);
BEGIN
CASE n OF
0:Printesc(238);
1:Printesc(239);
2:Printesc(240);
3:Printesc(241);
4:Printesc(242);
5:Printesc(243);
6:Printesc(244);
7:Printesc(245);
8:Printesc(246);
9:Printesc(247);
10:Printesc(248);
11:Printesc(249);
12:Printesc(250);
13:Printesc(251);
14:Printesc(252);
15:Printesc(253);
16:Printesc(254);
OTHERS:Print(255)
END;
END;
{176}
PROCEDURE Shownodelist(p:halfword);
LABEL
10;
VAR
n:integer;
BEGIN
IF(poolptr-strstart[strptr])>depththresho THEN
BEGIN
IF p>0 THEN
Print(177);
GOTO 10;
END;
n:=0;
WHILE p>0 DO
BEGIN
Println;
Printcurrent;
IF p>memend THEN
BEGIN
Print(183);
GOTO 10;
END;
n:=n+1;
IF n>breadthmax THEN
BEGIN
Print(184);
GOTO 10;
END;
{177}
IF(p>10000)THEN
Printfontand(p)
ELSE
CASE mem[p].hh.b0 OF
0,1,13:{
178}
BEGIN
IF mem[p].hh.b0=0 THEN
Printesc(104)
ELSE
IF mem[p].hh.b0=1
THEN
Printesc(118)
ELSE
Printesc(186);
Print(187);
Printscaled(mem[p+3].int);
Printchar(43);
Printscaled(mem[p+2].int);
Print(188);
Printscaled(mem[p+1].int);
IF mem[p].hh.b0=13 THEN
{179}
BEGIN
IF mem[p].hh.b1<>0 THEN
BEGIN
Print(
153);
Printint(mem[p].hh.b1+1);
Print(190);
END;
Print(191);
Printglue(mem[p+6].int,mem[p+5].hh.b1,0);
Print(192);
Printglue(mem[p+4].int,mem[p+5].hh.b0,0);
END
ELSE
BEGIN{180}
IF(mem[p+6].gr<>0)AND(mem[p+5].hh.b0<>0)THEN
BEGIN
Print(193);
IF mem[p+5].hh.b0=2 THEN
Print(194);
IF Abs(mem[p+6].int)<1048576 THEN
Print(195)
ELSE
IF Abs(mem[p+6].gr)>
20000.0 THEN
BEGIN
IF mem[p+6].gr>0 THEN
Printchar(62)
ELSE
Print(196);
Printglue(20000*65536,mem[p+5].hh.b1,0);
END
ELSE
Printglue(Round(mem[p+6].gr*65536),mem[p+5].hh.b1,0);
END;
IF mem[p+4].int<>0 THEN
BEGIN
Print(189);
Printscaled(mem[p+4].int);
END;
END;
BEGIN
BEGIN
strpool[poolptr]:=46;
poolptr:=poolptr+1;
END;
Shownodelist(mem[p+5].hh.rh);
poolptr:=poolptr-1;
END;
END;
2:{181}BEGIN
Printesc(197);
Printruledim(mem[p+3].int);
Printchar(43);
Printruledim(mem[p+2].int);
Print(188);
Printruledim(mem[p+1].int);
END;
3:{182}BEGIN
Printesc(198);
Printint(mem[p].hh.b1);
Print(199);
Printscaled(mem[p+1].int);
BEGIN
BEGIN
strpool[poolptr]:=46;
poolptr:=poolptr+1;
END;
Shownodelist(mem[p+2].int);
poolptr:=poolptr-1;
END;
END;
8:{1234}CASE mem[p].hh.b1 OF
0:BEGIN
Printesc(1049);
Printint(mem[p+1].hh.lh);
Printchar(61);
Printfilenam(mem[p+1].hh.rh,mem[p+2].hh.lh,mem[p+2].hh.rh);
END;
1:BEGIN
Printesc(1050);
Printint(mem[p+1].hh.lh);
Printmark(mem[p+1].hh.rh);
END;
2:BEGIN
Printesc(1051);
Printint(mem[p+1].hh.lh);
END;
3:BEGIN
Printesc(1052);
Printmark(mem[p+1].hh.rh);
END;
OTHERS:Print(1055)
END;
10:{183}IF mem[p].hh.b1>=100 THEN
{184}
BEGIN
Printchar(92);
IF mem[p].hh.b1=101 THEN
Printchar(99)
ELSE
IF mem[p].hh.b1=102 THEN
Printchar(120);
Print(204);
Printspec(mem[p+1].hh.lh,0);
BEGIN
BEGIN
strpool[poolptr]:=46;
poolptr:=poolptr+1;
END;
Shownodelist(mem[p+1].hh.rh);
poolptr:=poolptr-1;
END;
END
ELSE
BEGIN
Printesc(200);
IF mem[p].hh.b1<>0 THEN
BEGIN
Printchar(40);
IF mem[p].hh.b1<98 THEN
Printskippar(mem[p].hh.b1-1)
ELSE
IF mem[p].hh.b1
=98 THEN
Printesc(201)
ELSE
Printesc(202);
Printchar(41);
END;
IF mem[p].hh.b1<>98 THEN
BEGIN
Printchar(32);
IF mem[p].hh.b1<98 THEN
Printspec(mem[p+1].hh.lh,0)
ELSE
Printspec(mem[p
+1].hh.lh,203);
END;
END;
11:{185}IF mem[p].hh.b1=0 THEN
BEGIN
Printesc(205);
Printscaled(mem[p+1].int);
END
ELSE
BEGIN
Printesc(206);
Printscaled(mem[p+1].int);
Print(203);
END;
9:{186}BEGIN
Printesc(207);
IF mem[p].hh.b1=0 THEN
Print(208)
ELSE
Print(209);
IF mem[p+1].int<>0 THEN
BEGIN
Print(210);
Printscaled(mem[p+1].int);
END;
END;
6:{187}BEGIN
Printfontand(p+1);
Print(211);
fontinshortd:=mem[p+1].hh.b0;
Shortdisplay(mem[p+1].hh.rh);
Printchar(41);
END;
12:{188}BEGIN
Printesc(212);
Printint(mem[p+1].int);
END;
7:{189}BEGIN
Printesc(213);
IF mem[p].hh.b1>0 THEN
BEGIN
Print(214);
Printint(mem[p].hh.b1);
END;
BEGIN
BEGIN
strpool[poolptr]:=46;
poolptr:=poolptr+1;
END;
Shownodelist(mem[p+1].hh.lh);
poolptr:=poolptr-1;
END;
BEGIN
strpool[poolptr]:=124;
poolptr:=poolptr+1;
END;
Shownodelist(mem[p+1].hh.rh);
poolptr:=poolptr-1;
END;
4:{190}BEGIN
Printesc(215);
Printmark(mem[p+1].int);
END;
5:{191}BEGIN
Printesc(216);
BEGIN
BEGIN
strpool[poolptr]:=46;
poolptr:=poolptr+1;
END;
Shownodelist(mem[p+1].int);
poolptr:=poolptr-1;
END;
END;
{599}14:Printstyle(mem[p].hh.b1);
15,16,17,18,19,20,21,22,23,26,25,28,27,29,30:{604}BEGIN
CASE mem[p].hh.
b0 OF
15:Printesc(619);
16:Printesc(620);
17:Printesc(621);
18:Printesc(622);
19:Printesc(623);
20:Printesc(624);
21:Printesc(625);
22:Printesc(626);
26:Printesc(627);
25:Printesc(628);
28:Printesc(344);
23:BEGIN
Printesc(350);
Printdelimit(p+4);
END;
27:BEGIN
Printesc(339);
Printfamandc(p+4);
END;
29:BEGIN
Printesc(629);
Printdelimit(p+1);
END;
30:BEGIN
Printesc(630);
Printdelimit(p+1);
END;
END;
IF mem[p].hh.b1<>0 THEN
Printesc(343);
IF mem[p].hh.b0<29 THEN
Printsubsidi(p+1,46);
Printsubsidi(p+2,40);
Printsubsidi(p+3,91);
END;
24:{605}BEGIN
Printesc(631);
Print(632);
IF mem[p+1].int=1073741824 THEN
Print(633)
ELSE
Printscaled(mem[p+1].int)
;
IF(mem[p+4].qqqq.b0<>0)OR(mem[p+4].qqqq.b1<>0)OR(mem[p+4].qqqq.b2<>0)OR(
mem[p+4].qqqq.b3<>0)THEN
BEGIN
Print(634);
Printdelimit(p+4);
END;
IF(mem[p+5].qqqq.b0<>0)OR(mem[p+5].qqqq.b1<>0)OR(mem[p+5].qqqq.b2<>0)OR(
mem[p+5].qqqq.b3<>0)THEN
BEGIN
Print(635);
Printdelimit(p+5);
END;
Printsubsidi(p+2,92);
Printsubsidi(p+3,47);
END;
OTHERS:Print(185)
END;
p:=mem[p].hh.rh;
END;
10:
END;
{192}
PROCEDURE Showbox(p:halfword);
BEGIN{224}
depththresho:=eqtb[3608].int;
breadthmax:=eqtb[3607].int;
IF breadthmax<=0 THEN
breadthmax:=5;
IF poolptr+depththresho>=poolsize THEN
depththresho:=poolsize-poolptr-1;
Shownodelist(p);
Println;
END;
{194}
PROCEDURE Deletetokenr(p:halfword);
BEGIN
IF mem[p].hh.lh=0 THEN
Flushlist(p)
ELSE
mem[p].hh.lh:=mem[p].hh.lh
-1;
END;
{195}
PROCEDURE Deletegluere(p:halfword);
BEGIN
IF mem[p].hh.rh=0 THEN
Freenode(p,4)
ELSE
mem[p].hh.rh:=mem[p].hh.
rh-1;
END;
{196}
PROCEDURE Flushnodelis(p:halfword);
LABEL
30;
VAR
q:halfword;
BEGIN
WHILE p<>0 DO
BEGIN
q:=mem[p].hh.rh;
IF(p>10000)THEN
BEGIN
mem[p].hh.rh:=avail;
avail:=p;
dynused:=dynused-1;
END
ELSE
BEGIN
CASE mem[p].hh.b0 OF
0,1,13:BEGIN
Flushnodelis(mem[p+5].
hh.rh);
Freenode(p,7);
GOTO 30;
END;
2:BEGIN
Freenode(p,4);
GOTO 30;
END;
3:BEGIN
Flushnodelis(mem[p+2].int);
Freenode(p,3);
GOTO 30;
END;
8:{1236}BEGIN
CASE mem[p].hh.b1 OF
0:Freenode(p,3);
1,3:BEGIN
Deletetokenr(mem[p+1].hh.rh);
Freenode(p,2);
GOTO 30;
END;
2:Freenode(p,2);
OTHERS:Confusion(1057)
END;
GOTO 30;
END;
10:BEGIN
Deletegluere(mem[p+1].hh.lh);
Flushnodelis(mem[p+1].hh.rh);
END;
11,9,12:;
6:Flushnodelis(mem[p+1].hh.rh);
4:Deletetokenr(mem[p+1].int);
7:BEGIN
Flushnodelis(mem[p+1].hh.lh);
Flushnodelis(mem[p+1].hh.rh);
END;
5:Flushnodelis(mem[p+1].int);
OTHERS:Confusion(217)
END;
Freenode(p,2);
30:
END;
p:=q;
END;
END;
{198}
FUNCTION Copynodelist(p:halfword):halfword;
VAR
h:halfword;
q:halfword;
r:halfword;
words:0..5;
BEGIN
h:=Getavail;
q:=h;
WHILE p<>0 DO
BEGIN{199}
words:=1;
IF(p>10000)THEN
r:=Getavail
ELSE
{200}
CASE mem[p].hh.b0 OF
0,1,13:BEGIN
r
:=Getnode(7);
mem[r+6]:=mem[p+6];
mem[r+5]:=mem[p+5];
mem[r+5].hh.rh:=Copynodelist(mem[p+5].hh.rh);
words:=5;
END;
2:BEGIN
r:=Getnode(4);
words:=4;
END;
3:BEGIN
r:=Getnode(3);
mem[r+2].int:=Copynodelist(mem[p+2].int);
words:=2;
END;
8:{1235}CASE mem[p].hh.b1 OF
0:BEGIN
r:=Getnode(3);
words:=3;
END;
1,3:BEGIN
r:=Getnode(2);
mem[mem[p+1].hh.rh].hh.lh:=mem[mem[p+1].hh.rh].hh.lh+1;
words:=2;
END;
2:BEGIN
r:=Getnode(2);
words:=2;
END;
OTHERS:Confusion(1056)
END;
10:BEGIN
r:=Getnode(2);
mem[mem[p+1].hh.lh].hh.rh:=mem[mem[p+1].hh.lh].hh.rh+1;
mem[r+1].hh.lh:=mem[p+1].hh.lh;
mem[r+1].hh.rh:=Copynodelist(mem[p+1].hh.rh);
END;
11,9,12:BEGIN
r:=Getnode(2);
words:=2;
END;
6:BEGIN
r:=Getnode(2);
mem[r+1]:=mem[p+1];
mem[r+1].hh.rh:=Copynodelist(mem[p+1].hh.rh);
END;
7:BEGIN
r:=Getnode(2);
mem[r+1].hh.lh:=Copynodelist(mem[p+1].hh.lh);
mem[r+1].hh.rh:=Copynodelist(mem[p+1].hh.rh);
END;
4:BEGIN
r:=Getnode(2);
mem[mem[p+1].int].hh.lh:=mem[mem[p+1].int].hh.lh+1;
words:=2;
END;
5:BEGIN
r:=Getnode(2);
mem[r+1].int:=Copynodelist(mem[p+1].int);
END;
OTHERS:Confusion(218)
END;
WHILE words>0 DO
BEGIN
words:=words-1;
mem[r+words]:=mem[p+words];
END;
mem[q].hh.rh:=r;
q:=r;
p:=mem[p].hh.rh;
END;
mem[q].hh.rh:=0;
q:=mem[h].hh.rh;
BEGIN
mem[h].hh.rh:=avail;
avail:=h;
dynused:=dynused-1;
END;
Copynodelist:=q;
END;
{205}PROCEDURE Printmode(m:integer);
BEGIN
IF m>0 THEN
CASE m DIV(92)OF
0:Print(219);
1:Print(220);
2:Print(221);
END
ELSE
CASE(-m)DIV(92)OF
0:Print(222);
1:Print(223);
2:Print(207);
END;
Print(224);
END;
{210}
PROCEDURE Pushnest;
BEGIN
IF nestptr>maxneststack THEN
BEGIN
maxneststack:=nestptr;
IF nestptr=nestsize THEN
Overflow(225,nestsize);
END;
nest[nestptr]:=curlist;
nestptr:=nestptr+1;
curlist.headfield:=Getavail;
curlist.tailfield:=curlist.headfield;
curlist.alreadyfield:=0;
curlist.mlfield:=line;
END;
{211}
PROCEDURE Popnest;
BEGIN
BEGIN
mem[curlist.headfield].hh.rh:=avail;
avail:=curlist.headfield;
dynused:=dynused-1;
END;
nestptr:=nestptr-1;
curlist:=nest[nestptr];
END;
{212}
PROCEDURE Showactiviti;
VAR
p:0..nestsize;
m:-185..185;
a:integer;
q,r:halfword;
BEGIN
nest[nestptr]:=curlist;
Printnl(226);
Println;
FOR p:=nestptr DOWNTO 0 DO
BEGIN
m:=nest[p].modefield;
a:=nest[p].auxfield;
Printnl(227);
Printmode(m);
Print(228);
Printint(Abs(nest[p].mlfield));
IF nest[p].mlfield<0 THEN
Print(229);
IF p=0 THEN
BEGIN
Printnl(230);
{876}Showbox(mem[10002].hh.rh);
IF pagecontents>0 THEN
BEGIN
Printnl(711);
Printscaled(pagesofar[1]);
IF pagesofar[2]<>0 THEN
BEGIN
Print(181);
Printscaled(pagesofar[2]);
Print(226);
END;
IF pagesofar[3]<>0 THEN
BEGIN
Print(181);
Printscaled(pagesofar[3]);
Print(180);
END;
IF pagesofar[4]<>0 THEN
BEGIN
Print(181);
Printscaled(pagesofar[4]);
Print(712);
END;
IF pagesofar[5]<>0 THEN
BEGIN
Print(181);
Printscaled(pagesofar[5]);
Print(713);
END;
IF pagesofar[6]<>0 THEN
BEGIN
Print(182);
Printscaled(pagesofar[6]);
END;
Printnl(714);
Printscaled(pagesize);
r:=mem[10000].hh.rh;
WHILE r<>10000 DO
BEGIN
Println;
Printesc(198);
a:=mem[r].hh.b1;
Printint(a);
Print(715);
a:=Xovern(mem[r+1].int,1000)*eqtb[3622+a].int;
Printscaled(a);
IF mem[r].hh.b0=1 THEN
BEGIN
q:=10002;
a:=0;
REPEAT
q:=mem[q].hh.rh;
IF(mem[q].hh.b0=3)AND(mem[q].hh.b1=mem[r].hh.b1)THEN
a:=a+1;
UNTIL q=mem[r+3].hh.lh;
Print(716);
Printint(a);
Print(717);
END;
r:=mem[r].hh.rh;
END;
END;
Printnl(231);
END;
Showbox(mem[nest[p].headfield].hh.rh);
CASE Abs(m)DIV(92)OF
0:BEGIN
Printnl(232);
IF a<=-65536000 THEN
Print(233)
ELSE
Printscaled(a);
IF nest[p].alreadyfield<>0 THEN
BEGIN
Print(234);
Printint(nest[p].alreadyfield);
Print(235);
END;
END;
1:BEGIN
Printnl(236);
Printint(a);
END;
2:IF a<>0 THEN
BEGIN
Print(237);
Showbox(a);
END;
END;
END;
END;
{225}
PROCEDURE Printparam(n:integer);
BEGIN
CASE n OF
0:Printesc(258);
1:Printesc(259);
2:Printesc(260);
3:Printesc(261);
4:Printesc(262);
5:Printesc(263);
6:Printesc(264);
7:Printesc(265);
8:Printesc(266);
9:Printesc(267);
10:Printesc(268);
11:Printesc(269);
12:Printesc(270);
13:Printesc(271);
14:Printesc(272);
15:Printesc(273);
16:Printesc(274);
17:Printesc(275);
18:Printesc(276);
19:Printesc(277);
20:Printesc(278);
21:Printesc(279);
22:Printesc(280);
23:Printesc(281);
24:Printesc(282);
25:Printesc(283);
26:Printesc(284);
27:Printesc(285);
28:Printesc(286);
29:Printesc(287);
30:Printesc(288);
31:Printesc(289);
32:Printesc(290);
33:Printesc(291);
34:Printesc(292);
35:Printesc(293);
36:Printesc(294);
37:Printesc(295);
OTHERS:Print(296)
END;
END;
{229}
PROCEDURE Fixdateandti;
VAR
t:integer;
date:integer;
g:boolean;
BEGIN
calli(131137,,t,t,g);
date:=t DIV 262144;
eqtb[3603].int:=(t MOD 262144)DIV 60;
eqtb[3604].int:=(date MOD 31)+1;
eqtb[3605].int:=((date DIV 31)MOD 12)+1;
eqtb[3606].int:=(date DIV(31*12))+1964;
END;
{230}
PROCEDURE Begindiagnos;
BEGIN
oldsetting:=selector;
IF(eqtb[3612].int=0)AND(selector=19)THEN
selector:=selector-1;
END;
PROCEDURE Enddiagnosti(blankline:boolean);
BEGIN
Printnl(226);
IF blankline THEN
Println;
selector:=oldsetting;
END;
{232}
PROCEDURE Printlengthp(n:integer);
BEGIN
CASE n OF
0:Printesc(297);
1:Printesc(298);
2:Printesc(299);
3:Printesc(300);
4:Printesc(301);
5:Printesc(302);
6:Printesc(303);
7:Printesc(304);
8:Printesc(305);
9:Printesc(306);
10:Printesc(307);
11:Printesc(308);
12:Printesc(309);
13:Printesc(310);
14:Printesc(311);
15:Printesc(312);
16:Printesc(313);
OTHERS:Print(314)
END;
END;
{242}
FUNCTION Idlookup(j,l:integer):halfword;
LABEL
40;
VAR
h:integer;
p:halfword;
k:halfword;
BEGIN{244}
h:=buffer[j];
FOR k:=j+1 TO j+l-1 DO
BEGIN
h:=h+h+buffer[k];
WHILE h>=1777 DO h:=h-1777;
END;
p:=h+257;
WHILE true DO
BEGIN
IF(hash[p].rh>0)AND((strstart[hash[p].rh+1]-strstart
[hash[p].rh])=l)THEN
IF Streqbuf(hash[p].rh,j)THEN
GOTO 40;
IF hash[p].lh=0 THEN
BEGIN
IF nonewcontrol THEN
p:=2361
ELSE
{243}
BEGIN
IF hash[p].rh>0 THEN
BEGIN
REPEAT
IF(hashused=257)THEN
Overflow(316,2100
);
hashused:=hashused-1;
UNTIL hash[hashused].rh=0;
hash[p].lh:=hashused;
p:=hashused;
END;
BEGIN
IF poolptr+l>poolsize THEN
Overflow(129,poolsize);
END;
FOR k:=j TO j+l-1 DO
BEGIN
strpool[poolptr]:=buffer[k];
poolptr:=poolptr+1;
END;
hash[p].rh:=Makestring;
cscount:=cscount+1;
END;
GOTO 40;
END;
p:=hash[p].lh;
END;
40:
Idlookup:=p;
END;
{246}
PROCEDURE Sprintcs(p:halfword);
BEGIN
IF p<257 THEN
IF p<129 THEN
Printesc(p-1)
ELSE
Print(p-129)
ELSE
Printesc(hash[p].rh);
END;
{247}
PROCEDURE Primitive(s:strnumber;
c:quarterword;
o:halfword);
VAR
k:poolpointer;
j:smallnumber;
l:smallnumber;
BEGIN
IF s<128 THEN
curval:=s+1
ELSE
BEGIN
k:=strstart[s];
l:=strstart[s+1]-k;
FOR j:=0 TO l-1 DO buffer[j]:=strpool[k+j];
curval:=Idlookup(0,l);
BEGIN
strptr:=strptr-1;
poolptr:=strstart[strptr];
END;
hash[curval].rh:=s;
END;
eqtb[curval].hh.b1:=1;
eqtb[curval].hh.b0:=c;
eqtb[curval].hh.rh:=o;
END;
{257}PROCEDURE Newsavelevel(c:groupcode);
BEGIN
IF saveptr>maxsavestack THEN
BEGIN
maxsavestack:=saveptr;
IF maxsavestack>savesize-6 THEN
Overflow(351,savesize);
END;
savestack[saveptr].hh.b0:=2;
savestack[saveptr].hh.b1:=curgroup;
savestack[saveptr].hh.rh:=curboundary;
IF curlevel=255 THEN
Overflow(352,255);
curboundary:=saveptr;
curlevel:=curlevel+1;
saveptr:=saveptr+1;
curgroup:=c;
END;
{258}
PROCEDURE Eqdestroy(w:memoryword);
VAR
q:halfword;
BEGIN
CASE w.hh.b0 OF
94,95,96,97:Deletetokenr(w.hh.rh);
98:Deletegluere(w.hh.rh);
99:BEGIN
q:=w.hh.rh;
IF q<>0 THEN
Freenode(q,mem[q].hh.rh+mem[q].hh.rh+1);
END;
100:Flushnodelis(w.hh.rh);
OTHERS:
END;
END;
{259}
PROCEDURE Eqsave(p:halfword;
l:quarterword);
BEGIN
IF saveptr>maxsavestack THEN
BEGIN
maxsavestack:=saveptr;
IF maxsavestack>savesize-6 THEN
Overflow(351,savesize);
END;
IF l=0 THEN
savestack[saveptr].hh.b0:=1
ELSE
BEGIN
savestack[saveptr]:=
eqtb[p];
saveptr:=saveptr+1;
savestack[saveptr].hh.b0:=0;
END;
savestack[saveptr].hh.b1:=l;
savestack[saveptr].hh.rh:=p;
saveptr:=saveptr+1;
END;
{260}
PROCEDURE Eqdefine(p:halfword;
t:quarterword;
e:halfword);
BEGIN
IF eqtb[p].hh.b1=curlevel THEN
Eqdestroy(eqtb[p])
ELSE
IF curlevel>
1 THEN
Eqsave(p,eqtb[p].hh.b1);
eqtb[p].hh.b1:=curlevel;
eqtb[p].hh.b0:=t;
eqtb[p].hh.rh:=e;
END;
{261}
PROCEDURE Eqworddefine(p:halfword;
w:integer);
BEGIN
IF xeqlevel[p]<>curlevel THEN
BEGIN
Eqsave(p,xeqlevel[p]);
xeqlevel[p]:=curlevel;
END;
eqtb[p].int:=w;
END;
{262}
PROCEDURE Geqdefine(p:halfword;
t:quarterword;
e:halfword);
BEGIN
Eqdestroy(eqtb[p]);
eqtb[p].hh.b1:=1;
eqtb[p].hh.b0:=t;
eqtb[p].hh.rh:=e;
END;
PROCEDURE Geqworddefin(p:halfword;
w:integer);
BEGIN
eqtb[p].int:=w;
xeqlevel[p]:=1;
END;
{263}
PROCEDURE Unsave;
LABEL
30;
VAR
p:halfword;
l:quarterword;
BEGIN
IF curlevel>1 THEN
BEGIN
curlevel:=curlevel-1;
{264}
WHILE true DO
BEGIN
saveptr:=saveptr-1;
IF savestack[saveptr].hh.b0=2 THEN
GOTO 30;
p:=savestack[saveptr].hh.rh;
IF savestack[saveptr].hh.b0=0 THEN
BEGIN
l:=savestack[saveptr].hh.b1;
saveptr:=saveptr-1;
END
ELSE
savestack[saveptr]:=eqtb[2361];
{265}
IF p<3584 THEN
IF eqtb[p].hh.b1=1 THEN
Eqdestroy(savestack[saveptr]
)
ELSE
BEGIN
Eqdestroy(eqtb[p]);
eqtb[p]:=savestack[saveptr];
END
ELSE
IF xeqlevel[p]<>1 THEN
BEGIN
eqtb[p]:=savestack[saveptr];
xeqlevel[p]:=l;
END;
END;
30:
curgroup:=savestack[saveptr].hh.b1;
curboundary:=savestack[saveptr].hh.rh;
END
ELSE
Confusion(353);
END;
{266}
PROCEDURE Leavetranspa;
VAR
j,k:0..savesize;
BEGIN
j:=savestack[curboundary].hh.rh;
curgroup:=savestack[curboundary].hh.b1;
IF saveptr>1 THEN
FOR k:=curboundary TO saveptr-2 DO savestack[k]:=
savestack[k+1];
saveptr:=saveptr-1;
curboundary:=j;
END;
{269}
PROCEDURE Preparemag;
BEGIN
IF(magset>0)AND(eqtb[3600].int<>magset)THEN
BEGIN
Printnl(354);
Printint(eqtb[3600].int);
Print(355);
BEGIN
helpptr:=2;
helpline[1]:=356;
helpline[0]:=357;
END;
Interror(magset);
Geqworddefin(3600,magset);
END;
IF(eqtb[3600].int<=0)OR(eqtb[3600].int>32768)THEN
BEGIN
Printnl(358);
BEGIN
helpptr:=1;
helpline[0]:=359;
END;
Interror(eqtb[3600].int);
Geqworddefin(3600,1000);
END;
magset:=eqtb[3600].int;
END;
{276}
PROCEDURE Tokenshow(p:halfword);
BEGIN
IF p=0 THEN
Print(364)
ELSE
Showtokenlis(mem[p].hh.rh,0,1000);
END;
{278}
PROCEDURE Printcmdchr(cmd:quarterword;
chrcode:halfword);
BEGIN
CASE cmd OF
1:BEGIN
Print(365);
Printascii(chrcode);
END;
2:BEGIN
Print(366);
Printascii(chrcode);
END;
3:BEGIN
Print(367);
Printascii(chrcode);
END;
4:IF chrcode=128 THEN
Printesc(368)
ELSE
BEGIN
Print(369);
Printascii(chrcode);
END;
5:Printesc(370);
6:BEGIN
Print(371);
Printascii(chrcode);
END;
7:BEGIN
Print(372);
Printascii(chrcode);
END;
8:BEGIN
Print(373);
Printascii(chrcode);
END;
9:Print(374);
10:Print(375);
11:BEGIN
Print(376);
Printascii(chrcode);
END;
12:BEGIN
Print(377);
Printascii(chrcode);
END;
{219}73:Printskippar(chrcode);
{222}70:IF chrcode=2636 THEN
Printesc(256)
ELSE
Printesc(257);
{227}71:Printparam(chrcode);
{234}72:Printlengthp(chrcode);
{249}0:Printesc(319);
81:Printesc(320);
16:Printesc(321);
17:Printesc(322);
18:Printesc(215);
19:Printesc(323);
40:Printesc(324);
83:Printesc(325);
78:Printesc(58);
79:Printesc(326);
65:Printesc(327);
88:Printesc(328);
24:Printesc(329);
25:Printesc(330);
68:Printesc(331);
32:Printesc(332);
33:Printesc(333);
34:Printesc(334);
35:Printesc(335);
36:Printesc(336);
37:Printesc(198);
38:Printesc(216);
39:Printesc(337);
89:Printesc(338);
42:Printesc(47);
43:Printesc(339);
44:Printesc(340);
74:Printesc(341);
15:Printesc(342);
49:Printesc(343);
52:Printesc(201);
53:Printesc(344);
56:Printesc(345);
57:Printesc(346);
62:Printesc(347);
60:Printesc(348);
61:Printesc(349);
63:Printesc(32);
64:Printesc(350);
{313}13:Printesc(397);
{347}93:CASE chrcode OF
1:Printesc(427);
2:Printesc(428);
3:Printesc(429);
4:Printesc(430);
OTHERS:Printesc(426)
END;
{374}67:IF chrcode=0 THEN
Printesc(458)
ELSE
IF chrcode=1 THEN
Printesc(
459)
ELSE
Printesc(460);
75:Printesc(461);
66:IF chrcode=0 THEN
Printesc(462)
ELSE
Printesc(463);
{379}69:IF chrcode=1 THEN
Printesc(467)
ELSE
Printesc(466);
{939}14:IF chrcode=1 THEN
Printesc(751)
ELSE
Printesc(750);
{947}26:CASE chrcode OF
4:Printesc(753);
0:Printesc(754);
1:Printesc(755);
2:Printesc(756);
OTHERS:Printesc(757)
END;
27:CASE chrcode OF
4:Printesc(758);
0:Printesc(759);
1:Printesc(760);
2:Printesc(761);
OTHERS:Printesc(762)
END;
28:Printesc(202);
29:Printesc(205);
30:Printesc(206);
{960}22:IF chrcode=1 THEN
Printesc(783)
ELSE
Printesc(784);
23:IF chrcode=1 THEN
Printesc(785)
ELSE
Printesc(786);
21:CASE chrcode OF
0:Printesc(787);
1:Printesc(788);
2:Printesc(789);
3:Printesc(790);
4:Printesc(791);
5:Printesc(792);
OTHERS:Printesc(793);
END;
31:IF chrcode=100 THEN
Printesc(795)
ELSE
IF chrcode=101 THEN
Printesc(
796)
ELSE
IF chrcode=102 THEN
Printesc(797)
ELSE
Printesc(794);
{978}41:IF chrcode=0 THEN
Printesc(812)
ELSE
Printesc(811);
{1004}45:IF chrcode=1 THEN
Printesc(45)
ELSE
Printesc(213);
{1033}46:IF chrcode=1 THEN
Printesc(859)
ELSE
Printesc(858);
{1046}48:CASE chrcode OF
15:Printesc(619);
16:Printesc(620);
17:Printesc(621);
18:Printesc(622);
19:Printesc(623);
20:Printesc(624);
21:Printesc(625);
25:Printesc(628);
OTHERS:Printesc(627)
END;
{1058}51:Printstyle(chrcode);
{1065}50:CASE chrcode OF
1:Printesc(877);
2:Printesc(878);
3:Printesc(631);
4:Printesc(879);
5:Printesc(879);
OTHERS:Printesc(876)
END;
{1074}47:IF chrcode=29 THEN
Printesc(629)
ELSE
Printesc(630);
{1094}55:CASE chrcode OF
1:Printesc(893);
2:Printesc(894);
3:Printesc(895);
4:Printesc(896);
5:Printesc(897);
6:Printesc(898);
7:Printesc(899);
8:Printesc(900);
9:Printesc(901);
OTHERS:Printesc(892)
END;
{1111}80:IF chrcode=1 THEN
Printesc(920)
ELSE
IF chrcode=2 THEN
Printesc(
921)
ELSE
Printesc(922);
82:IF chrcode=0 THEN
Printesc(923)
ELSE
IF chrcode=1 THEN
Printesc(924)
ELSE
IF chrcode=2 THEN
Printesc(925)
ELSE
Printesc(926);
{1126}76:IF chrcode=2944 THEN
Printesc(942)
ELSE
IF chrcode=3072 THEN
Printesc(943)
ELSE
IF chrcode=3200 THEN
Printesc(944)
ELSE
IF chrcode=3328
THEN
Printesc(945)
ELSE
IF chrcode=3456 THEN
Printesc(946)
ELSE
Printesc(
947);
77:Printsize(chrcode-2895);
{1131}84,85,86,87:BEGIN
CASE cmd OF
84:Printesc(967);
85:Printesc(968);
86:Printesc(969);
OTHERS:Printesc(970)
END;
IF chrcode=0 THEN
Print(458)
ELSE
IF chrcode=1 THEN
Print(459)
ELSE
Print(
460);
END;
{1142}90:IF chrcode=1 THEN
Printesc(979)
ELSE
Printesc(978);
{1152}91:CASE chrcode OF
0:Printesc(989);
1:Printesc(990);
2:Printesc(991);
OTHERS:Printesc(992)
END;
{1158}58:IF chrcode=0 THEN
Printesc(993)
ELSE
Printesc(994);
{1166}54:IF chrcode=3200 THEN
Printesc(1000)
ELSE
Printesc(1001);
{1171}20:CASE chrcode OF
1:Printesc(1003);
2:Printesc(1004);
3:Printesc(1005);
OTHERS:Printesc(1002)
END;
{1174}92:Print(1014);
94:Print(1015);
95:Printesc(1016);
96:Printesc(1017);
97:Printesc(1018);
{1225}59:CASE chrcode OF
0:Printesc(1049);
1:Printesc(1050);
2:Printesc(1051);
3:Printesc(1052);
OTHERS:Print(1053)
END;
OTHERS:Print(378)
END;
END;
{290}PROCEDURE Showcontext;
LABEL
30;
VAR
oldsetting:0..21;
{294}i:0..bufsize;
j:0..bufsize;
l:0..halferrorlin;
m:integer;
n:0..errorline;
p:integer;
q:integer;
BEGIN
baseptr:=inputptr;
inputstack[baseptr]:=curinput;
WHILE true DO
BEGIN
curinput:=inputstack[baseptr];
{291}
IF(curinput.statefield<>0)OR(curinput.indexfield<>3)OR(curinput.
locfield<>0)THEN
BEGIN
tally:=0;
oldsetting:=selector;
IF curinput.statefield<>0 THEN
BEGIN{292}
IF(curinput.namefield=0)THEN
IF
baseptr=0 THEN
Printnl(383)
ELSE
Printnl(384)
ELSE
BEGIN
Printnl(385);
Printint(page);
Print(386);
Printint(line);
END;
Printchar(32);
{297}
BEGIN
l:=tally;
tally:=0;
selector:=20;
trickcount:=1000000;
END;
IF buffer[curinput.limitfield]=13 THEN
j:=curinput.limitfield
ELSE
j:=
curinput.limitfield+1;
IF j>0 THEN
FOR i:=curinput.startfield TO j-1 DO
BEGIN
IF i=curinput.
locfield THEN
BEGIN
firstcount:=tally;
trickcount:=tally+1+errorline-halferrorlin;
IF trickcount<errorline THEN
trickcount:=errorline;
END;
Print(buffer[i]);
END;
END
ELSE
BEGIN{293}
CASE curinput.indexfield OF
0:Printnl(387);
1,2:Printnl(388);
3:Printnl(389);
4:BEGIN
Println;
Printcs(curinput.namefield);
END;
5:Printnl(390);
6:Printnl(391);
7:Printnl(392);
8:Printnl(393);
OTHERS:Printnl(63)
END;
{298}
BEGIN
l:=tally;
tally:=0;
selector:=20;
trickcount:=1000000;
END;
IF curinput.indexfield<4 THEN
Showtokenlis(curinput.startfield,curinput.
locfield,100000)
ELSE
Showtokenlis(mem[curinput.startfield].hh.rh,
curinput.locfield,100000);
END;
selector:=oldsetting;
{296}
IF trickcount=1000000 THEN
BEGIN
firstcount:=tally;
trickcount:=tally+1+errorline-halferrorlin;
IF trickcount<errorline THEN
trickcount:=errorline;
END;
IF tally<trickcount THEN
m:=tally-firstcount
ELSE
m:=trickcount-
firstcount;
IF l+firstcount<=halferrorlin THEN
BEGIN
p:=0;
n:=l+firstcount;
END
ELSE
BEGIN
Print(394);
p:=l+firstcount-halferrorlin+3;
n:=halferrorlin;
END;
FOR q:=p TO firstcount-1 DO Printchar(trickbuf[q MOD errorline]);
Println;
FOR q:=1 TO n DO Printchar(32);
IF m+n<=errorline THEN
p:=firstcount+m
ELSE
p:=firstcount+(errorline-n-3
);
FOR q:=firstcount TO p-1 DO Printchar(trickbuf[q MOD errorline]);
IF m+n>errorline THEN
Print(394);
END;
IF(curinput.statefield<>0)THEN
IF(NOT(curinput.namefield=0))OR(baseptr=0
)THEN
GOTO 30;
baseptr:=baseptr-1;
END;
30:
curinput:=inputstack[inputptr];
END;
{300}
PROCEDURE Pushinput;
BEGIN
IF inputptr>maxinstack THEN
BEGIN
maxinstack:=inputptr;
IF inputptr=stacksize THEN
Overflow(395,stacksize);
END;
inputstack[inputptr]:=curinput;
inputptr:=inputptr+1;
END;
{301}
PROCEDURE Popinput;
BEGIN
inputptr:=inputptr-1;
curinput:=inputstack[inputptr];
END;
{302}
PROCEDURE Begintokenli(p:halfword;
t:quarterword);
BEGIN
Pushinput;
curinput.statefield:=0;
curinput.startfield:=p;
curinput.indexfield:=t;
IF t>=4 THEN
BEGIN
mem[p].hh.lh:=mem[p].hh.lh+1;
IF t=4 THEN
curinput.limitfield:=paramptr
ELSE
curinput.locfield:=mem[p]
.hh.rh;
END
ELSE
curinput.locfield:=p;
END;
{303}
PROCEDURE Endtokenlist;
BEGIN
IF curinput.indexfield>=3 THEN
BEGIN
IF curinput.indexfield=3 THEN
Flushlist(curinput.startfield)
ELSE
BEGIN
Deletetokenr(curinput.
startfield);
IF curinput.indexfield=4 THEN
WHILE paramptr>curinput.limitfield DO
BEGIN
paramptr:=paramptr-1;
Flushlist(paramstack[paramptr]);
END;
END;
END
ELSE
IF curinput.indexfield=1 THEN
alignstate:=0;
Popinput;
BEGIN
IF interrupt<>0 THEN
Pauseforinst;
END;
END;
{304}
PROCEDURE Backinput;
VAR
p:halfword;
BEGIN
WHILE(curinput.statefield=0)AND(curinput.locfield=0)DO
Endtokenlist;
p:=Getavail;
mem[p].hh.lh:=curtok;
IF curtok<768 THEN
IF curtok<512 THEN
alignstate:=alignstate-1
ELSE
alignstate:=alignstate+1;
Begintokenli(p,3);
END;
{305}
PROCEDURE Backerror;
BEGIN
Backinput;
Error;
END;
{306}
PROCEDURE Beginfilerea;
BEGIN
IF inopen=maxinopen THEN
Overflow(396,maxinopen);
IF first=bufsize THEN
Overflow(128,bufsize);
inopen:=inopen+1;
Pushinput;
curinput.indexfield:=inopen;
linestack[curinput.indexfield]:=line;
curinput.startfield:=first;
curinput.statefield:=1;
curinput.namefield:=0;
pagestack[curinput.indexfield]:=page;
END;
{307}
PROCEDURE Endfilereadi;
BEGIN
first:=curinput.startfield;
page:=pagestack[curinput.indexfield];
line:=linestack[curinput.indexfield];
IF NOT(curinput.namefield=0)THEN
Aclose(inputfile[curinput.indexfield]);
Popinput;
inopen:=inopen-1;
END;
{308}
PROCEDURE Clearforerro;
BEGIN
WHILE(curinput.statefield<>0)AND(curinput.namefield=0)AND(inputptr
>0)AND(curinput.locfield>curinput.limitfield)DO Endfilereadi;
Println;
breakin(termin,true);
END;
{314}
PROCEDURE Checkouterva;
VAR
p:halfword;
q:halfword;
BEGIN
IF scannerstatu<>0 THEN
IF scannerstatu>1 THEN
{315}
BEGIN
Runaway;
IF csptr=0 THEN
Printnl(402)
ELSE
BEGIN
p:=Getavail;
mem[p].hh.lh:=4096+csptr;
Begintokenli(p,3);
csptr:=0;
curcmd:=10;
curchr:=32;
Printnl(403);
END;
Print(404);
{316}p:=Getavail;
CASE scannerstatu OF
2:BEGIN
Print(410);
mem[p].hh.lh:=637;
END;
3:BEGIN
Print(411);
mem[p].hh.lh:=partoken;
longstate:=96;
END;
4:BEGIN
Print(412);
mem[p].hh.lh:=637;
q:=p;
p:=Getavail;
mem[p].hh.rh:=q;
mem[p].hh.lh:=6453;
END;
END;
Begintokenli(p,3);
Print(405);
Sprintcs(warningindex);
BEGIN
helpptr:=4;
helpline[3]:=406;
helpline[2]:=407;
helpline[1]:=408;
helpline[0]:=409;
END;
deletionsall:=false;
Error;
deletionsall:=true;
END
ELSE
IF csptr=0 THEN
BEGIN
Printnl(398);
BEGIN
helpptr:=3;
helpline[2]:=399;
helpline[1]:=400;
helpline[0]:=401;
END;
Error;
END;
END;
{317}
PROCEDURE Openlogfile;
FORWARD;
PROCEDURE Firmupthelin;
FORWARD;
{318}
PROCEDURE Getnext;
LABEL
20,25,21,26,40;
VAR
k:0..bufsize;
t:halfword;
BEGIN
20:
csptr:=0;
IF curinput.statefield<>0 THEN
{320}
BEGIN
25:
IF curinput.locfield<=
curinput.limitfield THEN
BEGIN
curchr:=buffer[curinput.locfield];
curinput.locfield:=curinput.locfield+1;
21:
curcmd:=eqtb[2944+curchr].hh.rh;
{321}
CASE curinput.statefield+curcmd OF
{322}10,26,42,27,43:GOTO 25;
1,17,33:{331}BEGIN
IF curinput.locfield>curinput.limitfield THEN
csptr:=
1
ELSE
BEGIN
26:
k:=curinput.locfield;
curchr:=buffer[k];
k:=k+1;
IF(eqtb[2944+curchr].hh.rh=11)AND(k<=curinput.limitfield)THEN
{333}
BEGIN
REPEAT
curchr:=buffer[k];
k:=k+1;
UNTIL(eqtb[2944+curchr].hh.rh<>11)OR(k>curinput.limitfield);
{332}
BEGIN
IF(buffer[k]=curchr)AND(eqtb[2944+curchr].hh.rh=7)AND(k<
curinput.limitfield)THEN
BEGIN
curchr:=buffer[k+1];
IF(curchr<=95)AND(curchr>=63)THEN
BEGIN
IF curchr>63 THEN
buffer[k-1]:=
curchr-64
ELSE
buffer[k-1]:=127;
curinput.limitfield:=curinput.limitfield-2;
first:=first-2;
WHILE k<=curinput.limitfield DO
BEGIN
buffer[k]:=buffer[k+2];
k:=k+1;
END;
GOTO 26;
END;
END;
END;
IF eqtb[2944+buffer[k-1]].hh.rh<>11 THEN
k:=k-1;
IF k>curinput.locfield+1 THEN
BEGIN
csptr:=Idlookup(curinput.locfield,k-
curinput.locfield);
curinput.locfield:=k;
GOTO 40;
END;
END
ELSE
{332}
BEGIN
IF(buffer[k]=curchr)AND(eqtb[2944+curchr].hh.rh=7)AND
(k<curinput.limitfield)THEN
BEGIN
curchr:=buffer[k+1];
IF(curchr<=95)AND(curchr>=63)THEN
BEGIN
IF curchr>63 THEN
buffer[k-1]:=
curchr-64
ELSE
buffer[k-1]:=127;
curinput.limitfield:=curinput.limitfield-2;
first:=first-2;
WHILE k<=curinput.limitfield DO
BEGIN
buffer[k]:=buffer[k+2];
k:=k+1;
END;
GOTO 26;
END;
END;
END;
csptr:=1+buffer[curinput.locfield];
curinput.locfield:=curinput.locfield+1;
END;
40:
curcmd:=eqtb[csptr].hh.b0;
curchr:=eqtb[csptr].hh.rh;
curinput.statefield:=17;
IF curcmd>=96 THEN
Checkouterva;
END;
14,30,46:{330}BEGIN
csptr:=curchr+129;
curcmd:=eqtb[csptr].hh.b0;
curchr:=eqtb[csptr].hh.rh;
curinput.statefield:=1;
IF curcmd>=96 THEN
Checkouterva;
END;
8,24,40:{329}BEGIN
IF(curchr=buffer[curinput.locfield])AND(curinput.
locfield<curinput.limitfield)THEN
IF(buffer[curinput.locfield+1]<=95)AND
(buffer[curinput.locfield+1]>=63)THEN
BEGIN
IF buffer[curinput.locfield
+1]=63 THEN
curchr:=127
ELSE
curchr:=buffer[curinput.locfield+1]-64;
curinput.locfield:=curinput.locfield+2;
GOTO 21;
END;
curinput.statefield:=1;
END;
16,32,48:{323}BEGIN
Printnl(413);
BEGIN
helpptr:=2;
helpline[1]:=414;
helpline[0]:=415;
END;
deletionsall:=false;
Error;
deletionsall:=true;
GOTO 25;
END;
{324}11:{326}BEGIN
curinput.statefield:=17;
curchr:=32;
END;
6:{325}BEGIN
curinput.statefield:=33;
curinput.locfield:=curinput.limitfield+1;
curcmd:=10;
curchr:=32;
END;
22,15,31,47:{327}BEGIN
curinput.statefield:=33;
curinput.locfield:=curinput.limitfield+1;
GOTO 25;
END;
38:{328}BEGIN
curinput.locfield:=curinput.limitfield+1;
csptr:=parloc;
curcmd:=eqtb[csptr].hh.b0;
curchr:=eqtb[csptr].hh.rh;
IF curcmd>=96 THEN
Checkouterva;
END;
2:alignstate:=alignstate+1;
18,34:BEGIN
curinput.statefield:=1;
alignstate:=alignstate+1;
END;
3:alignstate:=alignstate-1;
19,35:BEGIN
curinput.statefield:=1;
alignstate:=alignstate-1;
END;
20,21,23,25,28,29,36,37,39,41,44,45:curinput.statefield:=1;
OTHERS:
END;
END
ELSE
BEGIN{336}
IF NOT(curinput.namefield=0)THEN
{337}
BEGIN
line:=line
+1;
first:=curinput.startfield;
IF Inputln(inputfile[curinput.indexfield])THEN
Firmupthelin
ELSE
IF
curinput.limitfield<>curinput.startfield THEN
curinput.limitfield:=
curinput.startfield
ELSE
BEGIN
Checkouterva;
Printchar(41);
Break(termout);
Endfilereadi;
GOTO 20;
END;
buffer[curinput.limitfield]:=13;
first:=curinput.limitfield+1;
curinput.locfield:=curinput.startfield;
END
ELSE
BEGIN
IF inputptr>0 THEN
BEGIN
Endfilereadi;
GOTO 20;
END;
IF selector<18 THEN
Openlogfile;
IF interaction>1 THEN
BEGIN
IF curinput.limitfield=curinput.startfield
THEN
Printnl(416);
Println;
first:=curinput.startfield;
BEGIN
Print(42);
Terminput;
END;
curinput.limitfield:=last;
buffer[curinput.limitfield]:=13;
first:=last+1;
curinput.locfield:=curinput.startfield;
END
ELSE
Fatalerror(417);
END;
BEGIN
IF interrupt<>0 THEN
Pauseforinst;
END;
GOTO 25;
END;
END
ELSE
{334}
IF curinput.locfield<>0 THEN
BEGIN
t:=mem[curinput.locfield
].hh.lh;
curinput.locfield:=mem[curinput.locfield].hh.rh;
IF t>=4096 THEN
BEGIN
csptr:=t-4096;
curcmd:=eqtb[csptr].hh.b0;
curchr:=eqtb[csptr].hh.rh;
IF curcmd>=96 THEN
Checkouterva;
END
ELSE
BEGIN
curcmd:=t DIV 256;
curchr:=t MOD 256;
CASE curcmd OF
1:alignstate:=alignstate+1;
2:alignstate:=alignstate-1;
5:{335}BEGIN
Begintokenli(paramstack[curinput.limitfield+curchr-1],0);
GOTO 20;
END;
OTHERS:
END;
END;
END
ELSE
BEGIN
Endtokenlist;
GOTO 20;
END;
IF{319}(alignstate=0)AND(curcmd<=5)AND(curcmd>=4)THEN
{688}
BEGIN
curcmd:=
mem[curalign+5].hh.lh;
mem[curalign+5].hh.lh:=curchr;
IF curcmd=62 THEN
Begintokenli(10010,2)
ELSE
Begintokenli(mem[curalign+2]
.int,2);
alignstate:=1000000;
GOTO 20;
END;
END;
{338}PROCEDURE Firmupthelin;
VAR
k:0..bufsize;
BEGIN
curinput.limitfield:=last;
IF(eqtb[3611].int<>0)AND(interaction>1)AND(buffer[curinput.startfield]<>
12)THEN
BEGIN
Println;
IF curinput.startfield=curinput.limitfield THEN
BEGIN
buffer[curinput.
startfield]:=32;
curinput.limitfield:=curinput.limitfield+1;
END;
selector:=selector-1;
FOR k:=curinput.startfield TO curinput.limitfield-1 DO
BEGIN
Printchar(
buffer[k]);
Ptldch(xchr[buffer[k]]);
END;
Print(418);
Ptldbk(137);
Ptldln;
first:=curinput.startfield;
IF NOT Inputln(termin)THEN
Fatalerror(133);
IF last>first THEN
FOR k:=first TO last-1 DO Printchar(buffer[k]);
curinput.limitfield:=last;
Println;
selector:=selector+1;
END;
END;
{340}
PROCEDURE Gettoken;
BEGIN
nonewcontrol:=false;
Getnext;
nonewcontrol:=true;
IF csptr=0 THEN
BEGIN
IF curcmd=9 THEN
Fatalerror(419);
curtok:=(curcmd*256)+curchr;
END
ELSE
curtok:=4096+csptr;
END;
{341}{351}
PROCEDURE Macrocall;
LABEL
10,22,30,31,40;
VAR
r:halfword;
p:halfword;
q:halfword;
s:halfword;
t:halfword;
u,v:halfword;
rbraceptr:halfword;
n:smallnumber;
unbalance:halfword;
m:halfword;
refcount:halfword;
savescanners:smallnumber;
savewarningi:halfword;
BEGIN
savescanners:=scannerstatu;
savewarningi:=warningindex;
warningindex:=csptr;
refcount:=curchr;
r:=mem[refcount].hh.rh;
n:=0;
IF eqtb[3613].int<>0 THEN
{363}
BEGIN
Begindiagnos;
Println;
Printcs(warningindex);
Tokenshow(refcount);
Enddiagnosti(false);
END;
IF mem[r].hh.lh<>3584 THEN
{354}
BEGIN
scannerstatu:=3;
unbalance:=0;
longstate:=eqtb[csptr].hh.b0;
IF longstate>=96 THEN
longstate:=longstate-2;
REPEAT
IF(mem[r].hh.lh>3583)OR(mem[r].hh.lh<3328)THEN
s:=0
ELSE
BEGIN
s
:=mem[r].hh.rh;
r:=s;
p:=10003;
mem[p].hh.rh:=0;
m:=0;
END;
{355}22:
Gettoken;
IF curtok=mem[r].hh.lh THEN
{356}
BEGIN
r:=mem[r].hh.rh;
IF(mem[r].hh.lh>=3328)AND(mem[r].hh.lh<=3584)THEN
BEGIN
IF curtok<512
THEN
alignstate:=alignstate-1;
GOTO 40;
END
ELSE
GOTO 22;
END;
{359}
IF s<>r THEN
IF s=0 THEN
{360}
BEGIN
Printnl(444);
Sprintcs(warningindex);
Print(445);
BEGIN
helpptr:=4;
helpline[3]:=446;
helpline[2]:=447;
helpline[1]:=448;
helpline[0]:=449;
END;
Error;
GOTO 10;
END
ELSE
BEGIN
t:=s;
REPEAT
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=mem[t].hh.lh;
p:=q;
END;
m:=m+1;
u:=mem[t].hh.rh;
v:=s;
WHILE true DO
BEGIN
IF u=r THEN
IF curtok<>mem[v].hh.lh THEN
GOTO 30
ELSE
BEGIN
r:=mem[v].hh.rh;
GOTO 22;
END;
IF mem[u].hh.lh<>mem[v].hh.lh THEN
GOTO 30;
u:=mem[u].hh.rh;
v:=mem[v].hh.rh;
END;
30:
t:=mem[t].hh.rh;
UNTIL t=r;
END;
IF(curtok=partoken)AND(longstate<>95)THEN
{358}
BEGIN
IF longstate=94 THEN
BEGIN
Runaway;
Printnl(439);
Sprintcs(warningindex);
Print(440);
BEGIN
helpptr:=3;
helpline[2]:=441;
helpline[1]:=442;
helpline[0]:=443;
END;
Backerror;
END;
pstack[n]:=mem[10003].hh.rh;
alignstate:=alignstate-unbalance;
FOR m:=0 TO n DO Flushlist(pstack[m]);
GOTO 10;
END;
IF curtok<768 THEN
IF curtok<512 THEN
{361}
BEGIN
unbalance:=1;
WHILE true DO
BEGIN
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=curtok;
p:=q;
END;
Gettoken;
IF(curtok=partoken)AND(longstate<>95)THEN
{358}
BEGIN
IF longstate=94 THEN
BEGIN
Runaway;
Printnl(439);
Sprintcs(warningindex);
Print(440);
BEGIN
helpptr:=3;
helpline[2]:=441;
helpline[1]:=442;
helpline[0]:=443;
END;
Backerror;
END;
pstack[n]:=mem[10003].hh.rh;
alignstate:=alignstate-unbalance;
FOR m:=0 TO n DO Flushlist(pstack[m]);
GOTO 10;
END;
IF curtok<768 THEN
IF curtok<512 THEN
unbalance:=unbalance+1
ELSE
BEGIN
unbalance:=unbalance-1;
IF unbalance=0 THEN
GOTO 31;
END;
END;
31:
rbraceptr:=p;
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=curtok;
p:=q;
END;
END
ELSE
{357}
BEGIN
Printnl(432);
Sprintcs(warningindex);
Print(433);
BEGIN
helpptr:=5;
helpline[4]:=434;
helpline[3]:=435;
helpline[2]:=436;
helpline[1]:=437;
helpline[0]:=438;
END;
alignstate:=alignstate+1;
longstate:=94;
Error;
END
ELSE
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=curtok;
p:=q;
END;
m:=m+1;
IF(mem[r].hh.lh<3328)OR(mem[r].hh.lh>3584)THEN
GOTO 22;
40:
IF s<>0 THEN
{362}
BEGIN
IF(m=1)AND(mem[p].hh.lh<768)AND(p<>10003)THEN
BEGIN
mem[rbraceptr].hh.rh:=0;
BEGIN
mem[p].hh.rh:=avail;
avail:=p;
dynused:=dynused-1;
END;
p:=mem[10003].hh.rh;
pstack[n]:=mem[p].hh.rh;
BEGIN
mem[p].hh.rh:=avail;
avail:=p;
dynused:=dynused-1;
END;
END
ELSE
pstack[n]:=mem[10003].hh.rh;
n:=n+1;
IF eqtb[3613].int<>0 THEN
BEGIN
Begindiagnos;
Printnl(35);
Printint(n);
Print(450);
Showtokenlis(pstack[n-1],0,1000);
Enddiagnosti(false);
END;
END;
UNTIL mem[r].hh.lh=3584;
END;
{352}
WHILE(curinput.statefield=0)AND(curinput.locfield=0)DO Endtokenlist
;
Begintokenli(refcount,4);
curinput.namefield:=warningindex;
curinput.locfield:=mem[r].hh.rh;
IF n>0 THEN
BEGIN
IF paramptr+n>maxparamstac THEN
BEGIN
maxparamstac:=
paramptr+n;
IF maxparamstac>paramsize THEN
Overflow(431,paramsize);
END;
FOR m:=0 TO n-1 DO paramstack[paramptr+m]:=pstack[m];
paramptr:=paramptr+n;
END;
10:
scannerstatu:=savescanners;
warningindex:=savewarningi;
END;
PROCEDURE Getnctoken;
LABEL
30;
BEGIN
WHILE true DO
BEGIN
Getnext;
IF curcmd<=91 THEN
GOTO 30;
IF curcmd>=94 THEN
Macrocall
ELSE
IF curcmd=93 THEN
{348}
BEGIN
IF curmark
[curchr]<>0 THEN
Begintokenli(curmark[curchr],7);
END
ELSE
{342}
BEGIN
Printnl(420);
BEGIN
helpptr:=5;
helpline[4]:=421;
helpline[3]:=422;
helpline[2]:=423;
helpline[1]:=424;
helpline[0]:=425;
END;
Error;
END;
END;
30:
IF csptr=0 THEN
curtok:=(curcmd*256)+curchr
ELSE
curtok:=4096+csptr;
END;
{343}
PROCEDURE Nctoken;
LABEL
30;
BEGIN
WHILE true DO
BEGIN
IF curcmd<=91 THEN
GOTO 30;
IF curcmd>=94 THEN
Macrocall
ELSE
IF curcmd=93 THEN
{348}
BEGIN
IF curmark
[curchr]<>0 THEN
Begintokenli(curmark[curchr],7);
END
ELSE
{342}
BEGIN
Printnl(420);
BEGIN
helpptr:=5;
helpline[4]:=421;
helpline[3]:=422;
helpline[2]:=423;
helpline[1]:=424;
helpline[0]:=425;
END;
Error;
END;
Getnext;
END;
30:
IF csptr=0 THEN
curtok:=(curcmd*256)+curchr
ELSE
curtok:=4096+csptr;
END;
{365}
PROCEDURE Scanleftbrac;
BEGIN{366}
REPEAT
Getnctoken;
UNTIL curcmd<>10;
IF curcmd<>1 THEN
BEGIN
Printnl(451);
BEGIN
helpptr:=4;
helpline[3]:=452;
helpline[2]:=453;
helpline[1]:=454;
helpline[0]:=455;
END;
Backerror;
curtok:=379;
curcmd:=1;
curchr:=123;
alignstate:=alignstate+1;
END;
END;
{367}
PROCEDURE Scanoptional;
BEGIN{366}
REPEAT
Getnctoken;
UNTIL curcmd<>10;
IF curtok<>3133 THEN
Backinput;
END;
{368}
PROCEDURE Passblock(l:integer);
LABEL
30;
BEGIN
scannerstatu:=1;
WHILE true DO
BEGIN
Gettoken;
IF curcmd=2 THEN
BEGIN
l:=l-1;
IF l<=0 THEN
GOTO 30;
END
ELSE
IF curcmd=1 THEN
l:=l+1;
END;
30:
IF l<0 THEN
BEGIN
alignstate:=alignstate+1;
Printnl(451);
BEGIN
helpptr:=2;
helpline[1]:=456;
helpline[0]:=457;
END;
Error;
END;
scannerstatu:=0;
{369}
BEGIN
Getnctoken;
IF curcmd<>10 THEN
Backinput;
END;
END;
{370}FUNCTION Scankeyword(s:strnumber):boolean;
LABEL
10;
VAR
p:halfword;
q:halfword;
k:poolpointer;
BEGIN
p:=10011;
mem[p].hh.rh:=0;
k:=strstart[s];
WHILE k<strstart[s+1]DO
BEGIN
Getnctoken;
IF(curcmd=11)AND((curchr=strpool[k])OR(curchr=strpool[k]-32))THEN
BEGIN
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=curtok;
p:=q;
END;
k:=k+1
END
ELSE
BEGIN
Backinput;
IF p<>10011 THEN
Begintokenli(mem[10011].hh.rh,3);
Scankeyword:=false;
GOTO 10;
END;
END;
Flushlist(mem[10011].hh.rh);
Scankeyword:=true;
10:
END;
{371}
PROCEDURE Scanint;
FORWARD;
{388}
PROCEDURE Scansevenbit;
BEGIN
Scanint;
IF(curval<0)OR(curval>127)THEN
BEGIN
Printnl(473);
BEGIN
helpptr:=2;
helpline[1]:=474;
helpline[0]:=475;
END;
Interror(curval);
curval:=0;
END;
END;
{389}
PROCEDURE Scaneightbit;
BEGIN
Scanint;
IF(curval<0)OR(curval>255)THEN
BEGIN
Printnl(476);
BEGIN
helpptr:=2;
helpline[1]:=477;
helpline[0]:=475;
END;
Interror(curval);
curval:=0;
END;
END;
{390}
PROCEDURE Scanfourbiti;
BEGIN
Scanint;
IF(curval<0)OR(curval>15)THEN
BEGIN
Printnl(478);
BEGIN
helpptr:=2;
helpline[1]:=479;
helpline[0]:=475;
END;
Interror(curval);
curval:=0;
END;
END;
{391}
PROCEDURE Scancharnum;
BEGIN
Scanint;
IF(curval<0)OR(curval>255)THEN
BEGIN
Printnl(480);
BEGIN
helpptr:=2;
helpline[1]:=481;
helpline[0]:=475;
END;
Interror(curval);
curval:=0;
END;
END;
{392}
PROCEDURE Scanfifteenb;
BEGIN
Scanint;
IF(curval<0)OR(curval>32767)THEN
BEGIN
Printnl(482);
BEGIN
helpptr:=2;
helpline[1]:=483;
helpline[0]:=475;
END;
Interror(curval);
curval:=0;
END;
END;
{393}
PROCEDURE Scantwentyse;
BEGIN
Scanint;
IF(curval<0)OR(curval>134217727)THEN
BEGIN
Printnl(484);
BEGIN
helpptr:=2;
helpline[1]:=485;
helpline[0]:=475;
END;
Interror(curval);
curval:=0;
END;
END;
{494}
PROCEDURE Scanfontnumb;
VAR
f:internalfont;
BEGIN
Scanint;
IF(curval<0)OR(curval>=badfontcode)THEN
f:=0
ELSE
f:=fontnumber[curval];
IF f=0 THEN
BEGIN
Printnl(575);
BEGIN
helpptr:=3;
helpline[2]:=576;
helpline[1]:=577;
helpline[0]:=578;
END;
Interror(curval);
END;
curval:=f;
END;
{495}
PROCEDURE Scantexinfo(writing:boolean);
VAR
f:internalfont;
BEGIN
Scanfontnumb;
f:=curval;
Scanint;
IF f=0 THEN
curval:=fmemptr
ELSE
BEGIN
IF curval<=0 THEN
curval:=fmemptr
ELSE
BEGIN
IF writing AND(curval<=4)AND(curval>=2)AND(fontglue[f]<>0)
THEN
BEGIN
Deletegluere(fontglue[f]);
fontglue[f]:=0;
END;
IF curval>fontparams[f]THEN
IF f<fontptr THEN
curval:=fmemptr
ELSE
{497}
BEGIN
REPEAT
IF fmemptr=fontmemsize THEN
Overflow(583,fontmemsize);
fontinfo[fmemptr].int:=0;
fmemptr:=fmemptr+1;
fontparams[f]:=fontparams[f]+1;
UNTIL curval=fontparams[f];
curval:=fmemptr-1;
END
ELSE
curval:=curval+parambase[f];
END;
{496}
IF curval=fmemptr THEN
BEGIN
Printnl(561);
Printint(fontcode[f]);
Print(579);
Printint(fontparams[f]);
Print(580);
BEGIN
helpptr:=2;
helpline[1]:=581;
helpline[0]:=582;
END;
Error;
END;
END;
END;
{375}
PROCEDURE Scanthe(level:smallnumber;
negative:boolean);
LABEL
20;
VAR
m:halfword;
BEGIN
20:
Getnctoken;
m:=curchr;
CASE curcmd OF
76:{376}BEGIN
Scansevenbit;
IF m<3878 THEN
BEGIN
curval:=eqtb[m+curval].hh.rh;
curvallevel:=0;
END
ELSE
BEGIN
curval:=eqtb[m+curval].int;
curvallevel:=0;
END;
END;
70:{377}IF(level<>4)OR negative THEN
BEGIN
Printnl(464);
BEGIN
helpptr:=1;
helpline[0]:=465;
END;
Backerror;
BEGIN
curval:=0;
curvallevel:=1;
END;
END
ELSE
BEGIN
curval:=eqtb[m].hh.rh;
curvallevel:=4;
END;
71:BEGIN
curval:=eqtb[3584+m].int;
curvallevel:=0;
END;
72,75:BEGIN
curval:=eqtb[4006+m].int;
curvallevel:=1;
END;
73:IF m>=eqtb[2376].hh.rh THEN
BEGIN
curval:=eqtb[2362+m].hh.rh;
curvallevel:=3;
END
ELSE
BEGIN
curval:=eqtb[2362+m].hh.rh;
curvallevel:=2;
END;
69:{380}IF Abs(curlist.modefield)<>m THEN
BEGIN
Printnl(464);
BEGIN
helpptr:=4;
helpline[3]:=468;
helpline[2]:=469;
helpline[1]:=470;
helpline[0]:=465;
END;
Backerror;
BEGIN
curval:=0;
curvallevel:=1;
END;
END
ELSE
BEGIN
curval:=curlist.auxfield;
IF m=1 THEN
curvallevel:=1
ELSE
curvallevel:=0;
END;
79:BEGIN
curval:=eqtb[2943].hh.rh;
curvallevel:=0;
END;
74:{382}BEGIN
Scantexinfo(false);
fontinfo[fmemptr].int:=0;
BEGIN
curval:=fontinfo[curval].int;
curvallevel:=1;
END;
END;
67:{383}BEGIN
Scaneightbit;
CASE m OF
0:curval:=eqtb[3622+curval].int;
1:curval:=eqtb[4024+curval].int;
2:curval:=eqtb[2379+curval].hh.rh;
END;
curvallevel:=m;
END;
68:{381}BEGIN
curval:=0;
IF NOT(curlist.tailfield>10000)AND(curlist.modefield<>0)THEN
BEGIN
IF
mem[curlist.tailfield].hh.b0=10 THEN
curval:=mem[curlist.tailfield+1].hh
.lh;
END
ELSE
IF(curlist.modefield=1)AND(curlist.tailfield=curlist.headfield)
AND(lastpageglue<>65535)THEN
curval:=lastpageglue;
curvallevel:=2;
END;
78:BEGIN
curval:=fontcode[eqtb[2894].hh.rh];
curvallevel:=0;
END;
77:{384}BEGIN
Scanfourbiti;
BEGIN
curval:=fontcode[eqtb[m+curval].hh.rh];
curvallevel:=0;
END;
END;
66:BEGIN
IF m>0 THEN
negative:=NOT negative;
GOTO 20;
END;
OTHERS:{385}BEGIN
Printnl(471);
Printcmdchr(curcmd,curchr);
Print(472);
BEGIN
helpptr:=1;
helpline[0]:=465;
END;
Backerror;
BEGIN
curval:=0;
curvallevel:=1;
END;
END
END;
WHILE curvallevel>level DO{386}
BEGIN
IF curvallevel=2 THEN
curval:=mem[
curval+1].int;
curvallevel:=curvallevel-1;
END;
{387}
IF negative THEN
IF curvallevel>=2 THEN
BEGIN
curval:=Newspec(
curval);
{417}
BEGIN
mem[curval+1].int:=-mem[curval+1].int;
mem[curval+2].int:=-mem[curval+2].int;
mem[curval+3].int:=-mem[curval+3].int;
END;
END
ELSE
curval:=-curval
ELSE
IF(curvallevel>=2)AND(curvallevel<>4)THEN
mem[curval].hh.rh:=mem[curval].hh.rh+1;
END;
{395}
PROCEDURE Scanint;
LABEL
30;
VAR
negative:boolean;
m:integer;
d:smallnumber;
vacuous:boolean;
oksofar:boolean;
BEGIN
radix:=0;
oksofar:=true;
{396}negative:=false;
REPEAT{366}
REPEAT
Getnctoken;
UNTIL curcmd<>10;
IF curtok=3117 THEN
BEGIN
negative:=NOT negative;
curtok:=3115;
END;
UNTIL curtok<>3115;
IF curtok=3168 THEN
{397}
BEGIN
Gettoken;
IF curtok<4096 THEN
curval:=curchr
ELSE
IF curtok<4225 THEN
curval:=
curtok-4097
ELSE
curval:=curtok-4225;
IF curval>127 THEN
BEGIN
Printnl(486);
BEGIN
helpptr:=2;
helpline[1]:=487;
helpline[0]:=488;
END;
curval:=48;
Backerror;
END
ELSE
{369}
BEGIN
Getnctoken;
IF curcmd<>10 THEN
Backinput;
END;
END
ELSE
IF(curcmd=66)OR(curcmd=67)THEN
{398}
BEGIN
IF curcmd=67 THEN
Backinput
ELSE
IF curchr<>0 THEN
negative:=NOT negative;
Scanthe(0,false);
END
ELSE
{399}
BEGIN
radix:=10;
m:=214748364;
IF curtok=3111 THEN
BEGIN
radix:=8;
m:=268435456;
Getnctoken;
END
ELSE
IF curtok=3106 THEN
BEGIN
radix:=16;
m:=134217728;
Getnctoken;
END;
vacuous:=true;
curval:=0;
{400}
WHILE true DO
BEGIN
IF(curtok<3120+radix)AND(curtok>=3120)AND(
curtok<=3129)THEN
d:=curtok-3120
ELSE
IF(radix=16)AND(curtok<=2886)AND(
curtok>=2881)THEN
d:=curtok-2871
ELSE
GOTO 30;
vacuous:=false;
IF(curval>=m)AND((curval>m)OR(d>7)OR(radix<>10))THEN
BEGIN
IF oksofar
THEN
BEGIN
Printnl(489);
BEGIN
helpptr:=2;
helpline[1]:=490;
helpline[0]:=491;
END;
Error;
curval:=2147483647;
oksofar:=false;
END;
END
ELSE
curval:=curval*radix+d;
Getnctoken;
END;
30:;
IF vacuous THEN
{401}
BEGIN
Printnl(492);
BEGIN
helpptr:=3;
helpline[2]:=493;
helpline[1]:=494;
helpline[0]:=495;
END;
Error;
END;
IF curcmd<>10 THEN
Backinput;
END;
IF negative THEN
curval:=-curval;
END;
{403}PROCEDURE Scandimen(mu,inf,shortcut:boolean);
LABEL
30,40,45,88,89;
VAR
negative:boolean;
f:integer;
{405}num,denom:1..65536;
k:smallnumber;
j:smallnumber;
v:scaled;
savecurval:scaled;
BEGIN
f:=0;
aritherror:=false;
curorder:=0;
negative:=false;
IF NOT shortcut THEN
BEGIN{396}
negative:=false;
REPEAT{366}
REPEAT
Getnctoken;
UNTIL curcmd<>10;
IF curtok=3117 THEN
BEGIN
negative:=NOT negative;
curtok:=3115;
END;
UNTIL curtok<>3115;
IF(curcmd=66)OR(curcmd=67)THEN
{404}
BEGIN
IF curcmd=67 THEN
Backinput
ELSE
IF curchr<>0 THEN
negative:=NOT negative;
Scanthe(1,false);
IF curvallevel=1 THEN
GOTO 89;
END
ELSE
BEGIN
Backinput;
IF curtok<>3118 THEN
Scanint
ELSE
BEGIN
radix:=10;
curval:=0;
END;
IF(radix=10)AND(curtok=3118)THEN
{406}
BEGIN
k:=0;
Gettoken;
WHILE true DO
BEGIN
Getnctoken;
IF(curtok>3129)OR(curtok<3120)THEN
GOTO 30;
IF k<16 THEN
BEGIN
dig[k]:=curtok-3120;
k:=k+1;
END;
END;
30:
f:=Rounddecimal(k);
IF curcmd<>10 THEN
Backinput;
END;
END;
END;
IF curval<0 THEN
BEGIN
negative:=NOT negative;
curval:=-curval;
END;
{407}
IF inf THEN
{408}
IF Scankeyword(180)THEN
BEGIN
curorder:=1;
WHILE Scankeyword(108)DO
BEGIN
IF curorder=3 THEN
BEGIN
Printnl(498);
Print(499);
BEGIN
helpptr:=1;
helpline[0]:=500;
END;
Error;
END
ELSE
curorder:=curorder+1;
END;
GOTO 88;
END;
IF mu THEN
{409}
IF Scankeyword(203)THEN
GOTO 88
ELSE
BEGIN
Printnl(498);
Print(501);
BEGIN
helpptr:=4;
helpline[3]:=502;
helpline[2]:=503;
helpline[1]:=504;
helpline[0]:=505;
END;
Error;
GOTO 88;
END;
{410}
IF Scankeyword(506)THEN
BEGIN
v:={475}fontinfo[6+parambase[eqtb[
2894].hh.rh]].int;
GOTO 40;
END;
IF Scankeyword(507)THEN
BEGIN
v:={476}fontinfo[5+parambase[eqtb[2894].hh
.rh]].int;
GOTO 40;
END;
IF Scankeyword(508)THEN
BEGIN
v:=eqtb[4008].int;
GOTO 40;
END;
IF Scankeyword(509)THEN
j:=1
ELSE
IF Scankeyword(510)THEN
j:=2
ELSE
IF
Scankeyword(511)THEN
j:=3
ELSE
GOTO 45;
savecurval:=curval;
Scaneightbit;
IF eqtb[2638+curval].hh.rh=0 THEN
v:=0
ELSE
v:=mem[eqtb[2638+curval].hh.
rh+j].int;
curval:=savecurval;
40:
curval:=Nxplusy(curval,v,Xnoverd(v,f,65536));
GOTO 89;
45:;
IF Scankeyword(496)THEN
{411}
BEGIN{369}
BEGIN
Getnctoken;
IF curcmd<>10 THEN
Backinput;
END;
Preparemag;
IF eqtb[3600].int<>1000 THEN
BEGIN
curval:=Xnoverd(curval,1000,eqtb[3600
].int);
f:=(1000*f+65536*remainder)DIV eqtb[3600].int;
curval:=curval+(f DIV 65536);
f:=f MOD 65536;
END;
END;
IF Scankeyword(497)THEN
GOTO 88;
{412}
IF Scankeyword(512)THEN
BEGIN
num:=7227;
denom:=100;
END
ELSE
IF Scankeyword(513)THEN
BEGIN
num:=12;
denom:=1;
END
ELSE
IF Scankeyword(514)THEN
BEGIN
num:=7227;
denom:=254;
END
ELSE
IF Scankeyword(515)THEN
BEGIN
num:=7227;
denom:=2540;
END
ELSE
IF Scankeyword(516)THEN
BEGIN
num:=7227;
denom:=7200;
END
ELSE
IF Scankeyword(517)THEN
BEGIN
num:=215;
denom:=201;
END
ELSE
IF Scankeyword(518)THEN
BEGIN
num:=2580;
denom:=201;
END
ELSE
IF Scankeyword(519)THEN
GOTO 89
ELSE
{413}
BEGIN
Printnl(498);
Print(520);
BEGIN
helpptr:=6;
helpline[5]:=521;
helpline[4]:=522;
helpline[3]:=523;
helpline[2]:=503;
helpline[1]:=504;
helpline[0]:=505;
END;
Error;
GOTO 88;
END;
curval:=Xnoverd(curval,num,denom);
f:=(num*f+65536*remainder)DIV denom;
curval:=curval+(f DIV 65536);
f:=f MOD 65536;
88:
IF curval>=16384 THEN
aritherror:=true
ELSE
curval:=curval*65536+f;
89:
IF negative THEN
curval:=-curval;
IF aritherror OR(Abs(curval)>=1073741824)THEN
{414}
BEGIN
Printnl(524);
BEGIN
helpptr:=2;
helpline[1]:=525;
helpline[0]:=526;
END;
Error;
curval:=1073741823;
END;
{369}
BEGIN
Getnctoken;
IF curcmd<>10 THEN
Backinput;
END;
END;
{415}
PROCEDURE Scanglue(mu:boolean);
LABEL
10;
VAR
negative:boolean;
q:halfword;
BEGIN{396}
negative:=false;
REPEAT{366}
REPEAT
Getnctoken;
UNTIL curcmd<>10;
IF curtok=3117 THEN
BEGIN
negative:=NOT negative;
curtok:=3115;
END;
UNTIL curtok<>3115;
IF(curcmd=66)OR(curcmd=67)THEN
BEGIN
IF curcmd=67 THEN
Backinput
ELSE
IF
curchr<>0 THEN
negative:=NOT negative;
Scanthe(2,negative);
negative:=false;
IF curvallevel=2 THEN
GOTO 10;
IF curvallevel=0 THEN
Scandimen(mu,false,true);
END
ELSE
BEGIN
Backinput;
Scandimen(mu,false,false);
END;
{416}q:=Newspec(0);
mem[q+1].int:=curval;
IF Scankeyword(527)THEN
BEGIN
Scandimen(mu,true,false);
mem[q+2].int:=curval;
mem[q].hh.b0:=curorder;
END;
IF Scankeyword(528)THEN
BEGIN
Scandimen(mu,true,false);
mem[q+3].int:=curval;
mem[q].hh.b1:=curorder;
END;
curval:=q;
IF negative THEN
{417}
BEGIN
mem[curval+1].int:=-mem[curval+1].int;
mem[curval+2].int:=-mem[curval+2].int;
mem[curval+3].int:=-mem[curval+3].int;
END;
10:
END;
{418}
FUNCTION Scanrulespec:halfword;
LABEL
21;
VAR
q:halfword;
BEGIN
q:=Newrule;
IF curcmd=35 THEN
mem[q+1].int:=26215
ELSE
BEGIN
mem[q+3].int:=26215;
mem[q+2].int:=0;
END;
21:
IF Scankeyword(529)THEN
BEGIN
Scandimen(false,false,false);
mem[q+1].int:=curval;
GOTO 21;
END;
IF Scankeyword(530)THEN
BEGIN
Scandimen(false,false,false);
mem[q+3].int:=curval;
GOTO 21;
END;
IF Scankeyword(531)THEN
BEGIN
Scandimen(false,false,false);
mem[q+2].int:=curval;
GOTO 21;
END;
Scanrulespec:=q;
END;
{419}
FUNCTION Strtoks:halfword;
VAR
p:halfword;
q:halfword;
t:halfword;
k:poolpointer;
BEGIN
BEGIN
IF poolptr+1>poolsize THEN
Overflow(129,poolsize);
END;
p:=10003;
mem[p].hh.rh:=0;
k:=strstart[strptr];
WHILE k<poolptr DO
BEGIN
t:=strpool[k];
IF t=32 THEN
t:=2592
ELSE
IF t>=97 THEN
t:=2816+t
ELSE
t:=3072+t;
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=t;
p:=q;
END;
k:=k+1;
END;
poolptr:=strstart[strptr];
Strtoks:=p;
END;
{420}
FUNCTION Thetoks(negative:boolean):halfword;
VAR
oldsetting:0..21;
p,q,r:halfword;
BEGIN
Scanthe(4,negative);
IF curvallevel=4 THEN
{421}
BEGIN
r:=mem[curval].hh.rh;
p:=10003;
mem[p].hh.rh:=0;
IF curval<>0 THEN
WHILE r<>0 DO
BEGIN
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=mem[r].hh.lh;
p:=q;
END;
r:=mem[r].hh.rh;
END;
Thetoks:=p;
END
ELSE
BEGIN
oldsetting:=selector;
selector:=21;
CASE curvallevel OF
0:Printint(curval);
1:BEGIN
Printscaled(curval);
Print(497);
END;
2:BEGIN
Printspec(curval,497);
Deletegluere(curval);
END;
3:BEGIN
Printspec(curval,203);
Deletegluere(curval);
END;
END;
selector:=oldsetting;
Thetoks:=Strtoks;
END;
END;
{422}
FUNCTION Numtoks:halfword;
VAR
oldsetting:0..21;
BEGIN
oldsetting:=selector;
Scanthe(0,false);
selector:=21;
IF curval>=0 THEN
Printint(curval)
ELSE
Printromanin(-curval);
selector:=oldsetting;
Numtoks:=Strtoks;
END;
{423}
FUNCTION Scantoks(macrodef,xpand:boolean):halfword;
LABEL
40,30,31,32;
VAR
t:halfword;
s:halfword;
p:halfword;
q:halfword;
unbalance:halfword;
hashbrace:halfword;
BEGIN
scannerstatu:=2;
warningindex:=csptr;
defref:=Getavail;
mem[defref].hh.lh:=0;
p:=defref;
hashbrace:=0;
t:=3120;
IF macrodef THEN
{424}
BEGIN
WHILE true DO
BEGIN
Gettoken;
IF curtok<768 THEN
GOTO 31;
IF curcmd=6 THEN
{426}
BEGIN
s:=3328+curchr;
Gettoken;
IF curcmd=1 THEN
BEGIN
hashbrace:=curtok;
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=curtok;
p:=q;
END;
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=3584;
p:=q;
END;
GOTO 30;
END;
IF t=3129 THEN
BEGIN
Printnl(534);
BEGIN
helpptr:=1;
helpline[0]:=535;
END;
Error;
END
ELSE
BEGIN
t:=t+1;
IF curtok<>t THEN
BEGIN
Printnl(536);
BEGIN
helpptr:=2;
helpline[1]:=537;
helpline[0]:=538;
END;
Backerror;
END;
curtok:=s;
END;
END;
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=curtok;
p:=q;
END;
END;
31:
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=3584;
p:=q;
END;
IF curcmd=2 THEN
{425}
BEGIN
Printnl(451);
alignstate:=alignstate+1;
BEGIN
helpptr:=2;
helpline[1]:=532;
helpline[0]:=533;
END;
Error;
GOTO 40;
END;
30:
END
ELSE
Scanleftbrac;
{427}unbalance:=1;
WHILE true DO
BEGIN
IF xpand AND(curcmd<>82)THEN
{428}
BEGIN
WHILE true DO
BEGIN
Getnctoken;
IF curcmd=66 THEN
q:=Thetoks(curchr>0)
ELSE
IF curcmd=65 THEN
q:=Numtoks
ELSE
GOTO 32;
mem[p].hh.rh:=mem[10003].hh.rh;
p:=q;
END;
32:
END
ELSE
Gettoken;
IF curtok<768 THEN
IF curcmd<2 THEN
unbalance:=unbalance+1
ELSE
BEGIN
unbalance:=unbalance-1;
IF unbalance=0 THEN
GOTO 40;
END
ELSE
IF curcmd=6 THEN
{429}
BEGIN
s:=curtok;
Gettoken;
IF curcmd<>6 THEN
IF(curchr<49)OR(curchr>t-3072)OR(curcmd<>12)THEN
BEGIN
Printnl(539);
Sprintcs(warningindex);
BEGIN
helpptr:=3;
helpline[2]:=540;
helpline[1]:=541;
helpline[0]:=542;
END;
Backerror;
curtok:=s;
END
ELSE
curtok:=1232+curchr;
END;
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=curtok;
p:=q;
END;
END;
40:
scannerstatu:=0;
{369}
BEGIN
Getnctoken;
IF curcmd<>10 THEN
Backinput;
END;
IF hashbrace<>0 THEN
BEGIN
q:=Getavail;
mem[p].hh.rh:=q;
mem[q].hh.lh:=hashbrace;
p:=q;
END;
Scantoks:=p;
END;
{434}PROCEDURE Beginname;
BEGIN
areadelimite:=0;
extdelimiter:=0;
END;
{435}
FUNCTION Morename(c:asciicode):boolean;
BEGIN
IF c=32 THEN
Morename:=false
ELSE
BEGIN
IF c=91 THEN
areadelimite
:=poolptr
ELSE
IF c=46 THEN
extdelimiter:=poolptr;
BEGIN
IF poolptr+1>poolsize THEN
Overflow(129,poolsize);
END;
BEGIN
strpool[poolptr]:=c;
poolptr:=poolptr+1;
END;
Morename:=true;
END;
END;
{436}
PROCEDURE Endname;
BEGIN
IF strptr+3>maxstrings THEN
Overflow(130,maxstrings);
curname:=strptr;
IF extdelimiter=0 THEN
curext:=226
ELSE
BEGIN
strptr:=strptr+1;
strstart[strptr]:=extdelimiter;
curext:=strptr;
END;
IF areadelimite<=strstart[strptr]THEN
BEGIN
curarea:=226;
strptr:=strptr+1;
strstart[strptr]:=poolptr;
END
ELSE
BEGIN
strptr:=strptr+1;
strstart[strptr]:=areadelimite;
curarea:=Makestring;
END;
END;
{438}
PROCEDURE Packfilename(n,a,e:strnumber);
VAR
k:integer;
c:asciicode;
j:poolpointer;
BEGIN
IF(strstart[a+1]-strstart[a])+(strstart[n+1]-strstart[n])+(
strstart[e+1]-strstart[e])>filenamesize THEN
Overflow(544,filenamesize);
k:=1;
IF(e=545)AND((strstart[n+1]-strstart[n])>6)THEN
BEGIN
FOR j:=strstart[n]
TO strstart[n]+2 DO
BEGIN
c:=strpool[j];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
FOR j:=strstart[n+1]-3 TO strstart[n+1]-1 DO
BEGIN
c:=strpool[j];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
END
ELSE
FOR j:=strstart[n]TO strstart[n+1]-1 DO
BEGIN
c:=strpool[j];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
FOR j:=strstart[e]TO strstart[e+1]-1 DO
BEGIN
c:=strpool[j];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
FOR j:=strstart[a]TO strstart[a+1]-1 DO
BEGIN
c:=strpool[j];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
namelength:=k-1;
FOR k:=namelength+1 TO filenamesize DO nameoffile[k]:=' ';
END;
{442}
PROCEDURE Packbuffered(n:smallnumber;
a,b:integer);
VAR
k:integer;
c:asciicode;
j:integer;
d:integer;
BEGIN
IF n+b-a+5>filenamesize THEN
b:=a+filenamesize-n-5;
k:=1;
FOR j:=a TO b DO
BEGIN
c:=buffer[j];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
IF b=0 THEN
d:=1
ELSE
d:=6;
FOR j:=d TO 9 DO
BEGIN
c:=xord[texformatdef[j]];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
FOR j:=1 TO n DO
BEGIN
c:=xord[texformatdef[j]];
IF(c>=97)AND(c<=122)THEN
c:=c-32;
nameoffile[k]:=xchr[c];
k:=k+1;
END;
namelength:=k-1;
FOR k:=namelength+1 TO filenamesize DO nameoffile[k]:=' ';
END;
{444}
PROCEDURE Curnam(VAR chan:FILE;
VAR s:string);
EXTERN;
FUNCTION Makenamestri(VAR f:FILE):strnumber;
VAR
s:PACKED ARRAY[1..24]OF char;
k:1..24;
BEGIN
Curnam(f,s);
BEGIN
IF poolptr+24>poolsize THEN
Overflow(129,poolsize);
END;
k:=1;
WHILE Ord(s[k])<>0 DO
BEGIN
BEGIN
strpool[poolptr]:=xord[s[k]];
poolptr:=poolptr+1;
END;
k:=k+1;
END;
Makenamestri:=Makestring;
END;
FUNCTION Amakenamestr(VAR f:alphafile):strnumber;
BEGIN
Amakenamestr:=Makenamestri(f);
END;
FUNCTION Bmakenamestr(VAR f:bytefile):strnumber;
BEGIN
Bmakenamestr:=Makenamestri(f);
END;
FUNCTION Wmakenamestr(VAR f:wordfile):strnumber;
BEGIN
Wmakenamestr:=Makenamestri(f);
END;
{445}
PROCEDURE Writenamestr;
VAR
s:PACKED ARRAY[1..24]OF char;
k:1..24;
BEGIN
Curnam(fmtfile,s);
k:=1;
WHILE xord[s[k]]<>0 DO
BEGIN
Write(termout,s[k]);
k:=k+1;
END;
END;
{446}
PROCEDURE Scanfilename;
LABEL
30;
BEGIN
Beginname;
{366}
REPEAT
Getnctoken;
UNTIL curcmd<>10;
WHILE true DO
BEGIN
IF(curcmd>12)OR(curchr>127)THEN
BEGIN
Backinput;
GOTO 30;
END;
IF NOT Morename(curchr)THEN
GOTO 30;
Getnctoken;
END;
30:
Endname;
END;
{449}
PROCEDURE Packjobname(s:strnumber);
BEGIN
curarea:=226;
curext:=s;
curname:=jobname;
Packfilename(curname,curarea,curext);
END;
{450}
PROCEDURE Promptfilena(s,e:strnumber);
LABEL
30;
VAR
k:0..bufsize;
BEGIN
IF s=546 THEN
Printnl(547)
ELSE
Printnl(548);
Printfilenam(curname,curarea,curext);
Print(549);
IF e=550 THEN
Showcontext;
Printnl(551);
Print(s);
IF interaction<2 THEN
Fatalerror(552);
breakin(termin,true);
BEGIN
Print(553);
Terminput;
END;
{451}
BEGIN
Beginname;
k:=first;
WHILE(buffer[k]=32)AND(k<last)DO k:=k+1;
WHILE true DO
BEGIN
IF k=last THEN
GOTO 30;
IF NOT Morename(buffer[k])THEN
GOTO 30;
k:=k+1;
END;
30:
Endname;
END;
IF curext=226 THEN
curext:=e;
Packfilename(curname,curarea,curext);
END;
{454}
PROCEDURE Openlogfile;
VAR
oldsetting:0..21;
k:0..bufsize;
months:PACKED ARRAY[1..36]OF char;
BEGIN
oldsetting:=selector;
IF jobname=0 THEN
jobname:=556;
Packjobname(557);
WHILE NOT Aopenout(logfile)DO Promptfilena(558,557);
selector:=18;
{455}
BEGIN
Write(logfile,'This is TeX, Version -0.18S');
Print(formatident);
Print(560);
Printint(eqtb[3604].int);
Printchar(32);
months:='JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC';
FOR k:=3*eqtb[3605].int-2 TO 3*eqtb[3605].int DO Write(logfile,months[k]
);
Printchar(32);
Printint(eqtb[3606].int);
Printchar(32);
Printint(eqtb[3603].int DIV 60);
Printchar(58);
Printchar(48+((eqtb[3603].int MOD 60)DIV 10));
Printchar(48+(eqtb[3603].int MOD 10));
END;
inputstack[inputptr]:=curinput;
Printnl(559);
FOR k:=1 TO inputstack[0].limitfield DO Print(buffer[k-1]);
Println;
selector:=oldsetting+2;
END;
{456}
PROCEDURE Startinput;
LABEL
30;
BEGIN
Scanfilename;
IF curext=226 THEN
curext:=550;
Packfilename(curname,curarea,curext);
WHILE true DO
BEGIN
Beginfilerea;
IF Aopenin(inputfile[curinput.indexfield])THEN
GOTO 30;
Packfilename(curname,543,curext);
IF Aopenin(inputfile[curinput.indexfield])THEN
GOTO 30;
Endfilereadi;
Promptfilena(546,550);
END;
30:
curinput.namefield:=Amakenamestr(inputfile[curinput.indexfield]);
curinput.statefield:=33;
IF jobname=0 THEN
BEGIN
jobname:=curname;
Openlogfile;
END;
Print(153);
Print(curinput.namefield);
Break(termout);
{457}
BEGIN
IF Eoln(inputfile[curinput.indexfield])THEN
last:=curinput.
startfield
ELSE
BEGIN
buffer[curinput.startfield]:=xord[inputfile[
curinput.indexfield]↑];
first:=curinput.startfield+1;
IF NOT Inputln(inputfile[curinput.indexfield])THEN
Confusion(323);
IF(last-curinput.startfield=29)AND(buffer[curinput.startfield]=67)AND(
buffer[curinput.startfield+8]=22)THEN
BEGIN
WHILE(inputfile[curinput.
indexfield]↑<>Chr(12))AND(NOT Eof(inputfile[curinput.indexfield]))DO
BEGIN
Readln(inputfile[curinput.indexfield]);
Read(inputfile[curinput.indexfield],auxbuf:tempptr);
END;
buffer[curinput.startfield]:=12;
last:=curinput.startfield+1;
END;
END;
Firmupthelin;
buffer[curinput.limitfield]:=13;
first:=curinput.limitfield+1;
curinput.locfield:=curinput.startfield;
line:=1;
page:=1;
END;
END;
{477}PROCEDURE Readfontinfo(u:userfontcode;
nom,aire:strnumber;
s:scaled);
LABEL
30,11,45;
VAR
k:0..fontmemsize;
fileopened:boolean;
lf,lh,bc,ec,nw,nh,nd,ni,nl,nk,ne,np:halfword;
f:internalfont;
a,b,c,d:eightbits;
qw:fourquarters;
sw:scaled;
z:scaled;
alpha:integer;
beta:1..16;
BEGIN{479}{480}
fileopened:=false;
IF aire=226 THEN
Packfilename(nom,543,545)
ELSE
Packfilename(nom,aire,545
);
IF NOT Bopenin(tfmfile)THEN
GOTO 11;
fileopened:=true;
{482}
BEGIN
BEGIN
lf:=tfmfile↑;
IF lf>127 THEN
GOTO 11;
Get(tfmfile);
lf:=lf*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
lh:=tfmfile↑;
IF lh>127 THEN
GOTO 11;
Get(tfmfile);
lh:=lh*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
bc:=tfmfile↑;
IF bc>127 THEN
GOTO 11;
Get(tfmfile);
bc:=bc*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
ec:=tfmfile↑;
IF ec>127 THEN
GOTO 11;
Get(tfmfile);
ec:=ec*256+tfmfile↑;
END;
IF(bc>ec+1)OR(ec>255)THEN
GOTO 11;
Get(tfmfile);
BEGIN
nw:=tfmfile↑;
IF nw>127 THEN
GOTO 11;
Get(tfmfile);
nw:=nw*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
nh:=tfmfile↑;
IF nh>127 THEN
GOTO 11;
Get(tfmfile);
nh:=nh*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
nd:=tfmfile↑;
IF nd>127 THEN
GOTO 11;
Get(tfmfile);
nd:=nd*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
ni:=tfmfile↑;
IF ni>127 THEN
GOTO 11;
Get(tfmfile);
ni:=ni*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
nl:=tfmfile↑;
IF nl>127 THEN
GOTO 11;
Get(tfmfile);
nl:=nl*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
nk:=tfmfile↑;
IF nk>127 THEN
GOTO 11;
Get(tfmfile);
nk:=nk*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
ne:=tfmfile↑;
IF ne>127 THEN
GOTO 11;
Get(tfmfile);
ne:=ne*256+tfmfile↑;
END;
Get(tfmfile);
BEGIN
np:=tfmfile↑;
IF np>127 THEN
GOTO 11;
Get(tfmfile);
np:=np*256+tfmfile↑;
END;
IF lf<>6+lh+(ec-bc+1)+nw+nh+nd+ni+nl+nk+ne+np THEN
GOTO 11;
END;
{483}lf:=lf-6-lh;
IF np<7 THEN
lf:=lf+7-np;
IF(fontptr=fontmax)OR(fmemptr+lf>fontmemsize)THEN
{484}
BEGIN
Printnl(561)
;
Printint(u);
Printchar(61);
Printfilenam(nom,aire,226);
IF s<>0 THEN
BEGIN
Print(562);
Printscaled(s);
Print(497);
END;
Print(570);
BEGIN
helpptr:=4;
helpline[3]:=571;
helpline[2]:=572;
helpline[1]:=573;
helpline[0]:=574;
END;
Error;
GOTO 30;
END;
f:=fontptr+1;
charbase[f]:=fmemptr-bc;
widthbase[f]:=charbase[f]+ec+1;
heightbase[f]:=widthbase[f]+nw;
depthbase[f]:=heightbase[f]+nh;
italicbase[f]:=depthbase[f]+nd;
ligkernbase[f]:=italicbase[f]+ni;
kernbase[f]:=ligkernbase[f]+nl;
extenbase[f]:=kernbase[f]+nk;
parambase[f]:=extenbase[f]+ne;
{485}
BEGIN
IF lh<2 THEN
GOTO 11;
BEGIN
Get(tfmfile);
a:=tfmfile↑;
qw.b0:=a;
Get(tfmfile);
b:=tfmfile↑;
qw.b1:=b;
Get(tfmfile);
c:=tfmfile↑;
qw.b2:=c;
Get(tfmfile);
d:=tfmfile↑;
qw.b3:=d;
fontcheck[f]:=qw;
END;
Get(tfmfile);
BEGIN
z:=tfmfile↑;
IF z>127 THEN
GOTO 11;
Get(tfmfile);
z:=z*256+tfmfile↑;
END;
Get(tfmfile);
z:=z*256+tfmfile↑;
Get(tfmfile);
z:=(z*16)+(tfmfile↑DIV 16);
IF z<65536 THEN
GOTO 11;
WHILE lh>2 DO
BEGIN
Get(tfmfile);
Get(tfmfile);
Get(tfmfile);
Get(tfmfile);
lh:=lh-1;
END;
fontdsize[f]:=z;
IF s<>0 THEN
z:=s;
fontsize[f]:=z;
END;
{486}
FOR k:=fmemptr TO widthbase[f]-1 DO
BEGIN
BEGIN
Get(tfmfile);
a:=tfmfile↑;
qw.b0:=a;
Get(tfmfile);
b:=tfmfile↑;
qw.b1:=b;
Get(tfmfile);
c:=tfmfile↑;
qw.b2:=c;
Get(tfmfile);
d:=tfmfile↑;
qw.b3:=d;
fontinfo[k].qqqq:=qw;
END;
IF(a>=nw)OR(b DIV 16>=nh)OR(b MOD 16>=nd)OR(c DIV 4>=ni)THEN
GOTO 11;
CASE c MOD 4 OF
1:IF d>=nl THEN
GOTO 11;
3:IF d>=ne THEN
GOTO 11;
2:{487}BEGIN
BEGIN
IF(d<bc)OR(d>ec)THEN
GOTO 11
END;
WHILE d<k+bc-fmemptr DO
BEGIN
qw:=fontinfo[charbase[f]+d].qqqq;
IF(qw.b2 MOD 4)<>2 THEN
GOTO 45;
d:=qw.b3;
END;
IF d=k+bc-fmemptr THEN
GOTO 11;
45:
END;
OTHERS:
END;
END;
{488}
BEGIN{489}
BEGIN
alpha:=16*z;
beta:=16;
WHILE z>=8388608 DO
BEGIN
z:=z DIV 2;
beta:=beta DIV 2;
END;
END;
FOR k:=widthbase[f]TO ligkernbase[f]-1 DO
BEGIN
Get(tfmfile);
a:=tfmfile↑;
Get(tfmfile);
b:=tfmfile↑;
Get(tfmfile);
c:=tfmfile↑;
Get(tfmfile);
d:=tfmfile↑;
sw:=(((((d*z)DIV 256)+(c*z))DIV 256)+(b*z))DIV beta;
IF a=0 THEN
fontinfo[k].int:=sw
ELSE
IF a=255 THEN
fontinfo[k].int:=sw-
alpha
ELSE
GOTO 11;
END;
IF fontinfo[widthbase[f]].int<>0 THEN
GOTO 11;
IF fontinfo[heightbase[f]].int<>0 THEN
GOTO 11;
IF fontinfo[depthbase[f]].int<>0 THEN
GOTO 11;
IF fontinfo[italicbase[f]].int<>0 THEN
GOTO 11;
END;
{490}
BEGIN
FOR k:=ligkernbase[f]TO kernbase[f]-1 DO
BEGIN
BEGIN
Get(
tfmfile);
a:=tfmfile↑;
qw.b0:=a;
Get(tfmfile);
b:=tfmfile↑;
qw.b1:=b;
Get(tfmfile);
c:=tfmfile↑;
qw.b2:=c;
Get(tfmfile);
d:=tfmfile↑;
qw.b3:=d;
fontinfo[k].qqqq:=qw;
END;
BEGIN
IF(b<bc)OR(b>ec)THEN
GOTO 11
END;
IF c<128 THEN
BEGIN
IF(d<bc)OR(d>ec)THEN
GOTO 11
END
ELSE
IF d>=nk THEN
GOTO 11;
END;
IF(nl>0)AND(a<128)THEN
GOTO 11;
FOR k:=kernbase[f]TO extenbase[f]-1 DO
BEGIN
Get(tfmfile);
a:=tfmfile↑;
Get(tfmfile);
b:=tfmfile↑;
Get(tfmfile);
c:=tfmfile↑;
Get(tfmfile);
d:=tfmfile↑;
sw:=(((((d*z)DIV 256)+(c*z))DIV 256)+(b*z))DIV beta;
IF a=0 THEN
fontinfo[k].int:=sw
ELSE
IF a=255 THEN
fontinfo[k].int:=sw-
alpha
ELSE
GOTO 11;
END;
END;
{491}
FOR k:=extenbase[f]TO parambase[f]-1 DO
BEGIN
BEGIN
Get(tfmfile);
a:=tfmfile↑;
qw.b0:=a;
Get(tfmfile);
b:=tfmfile↑;
qw.b1:=b;
Get(tfmfile);
c:=tfmfile↑;
qw.b2:=c;
Get(tfmfile);
d:=tfmfile↑;
qw.b3:=d;
fontinfo[k].qqqq:=qw;
END;
IF a<>0 THEN
BEGIN
IF(a<bc)OR(a>ec)THEN
GOTO 11
END;
IF b<>0 THEN
BEGIN
IF(b<bc)OR(b>ec)THEN
GOTO 11
END;
IF c<>0 THEN
BEGIN
IF(c<bc)OR(c>ec)THEN
GOTO 11
END;
BEGIN
IF(d<bc)OR(d>ec)THEN
GOTO 11
END;
END;
{492}
BEGIN
FOR k:=1 TO np DO
IF k=1 THEN
BEGIN
Get(tfmfile);
sw:=tfmfile↑;
IF sw>127 THEN
sw:=sw-256;
Get(tfmfile);
sw:=sw*256+tfmfile↑;
Get(tfmfile);
sw:=sw*256+tfmfile↑;
Get(tfmfile);
fontinfo[parambase[f]].int:=(sw*16)+(tfmfile↑DIV 16);
END
ELSE
BEGIN
Get(tfmfile);
a:=tfmfile↑;
Get(tfmfile);
b:=tfmfile↑;
Get(tfmfile);
c:=tfmfile↑;
Get(tfmfile);
d:=tfmfile↑;
sw:=(((((d*z)DIV 256)+(c*z))DIV 256)+(b*z))DIV beta;
IF a=0 THEN
fontinfo[parambase[f]+k-1].int:=sw
ELSE
IF a=255 THEN
fontinfo[parambase[f]+k-1].int:=sw-alpha
ELSE
GOTO 11;
END;
IF Eof(tfmfile)THEN
GOTO 11;
FOR k:=np+1 TO 7 DO fontinfo[parambase[f]+k-1].int:=0;
END;
{493}fontcode[f]:=u;
fontnumber[u]:=f;
IF np>=7 THEN
fontparams[f]:=np
ELSE
fontparams[f]:=7;
fontname[f]:=nom;
fontarea[f]:=aire;
fontbc[f]:=bc;
fontec[f]:=ec;
fontglue[f]:=0;
charbase[f]:=charbase[f];
widthbase[f]:=widthbase[f];
ligkernbase[f]:=ligkernbase[f];
kernbase[f]:=kernbase[f];
extenbase[f]:=extenbase[f];
parambase[f]:=parambase[f]-1;
fmemptr:=fmemptr+lf;
fontptr:=f;
GOTO 30;
11:{478}
Printnl(561);
Printint(u);
Printchar(61);
Printfilenam(nom,aire,226);
IF s<>0 THEN
BEGIN
Print(562);
Printscaled(s);
Print(497);
END;
IF fileopened THEN
Print(563)
ELSE
Print(564);
BEGIN
helpptr:=5;
helpline[4]:=565;
helpline[3]:=566;
helpline[2]:=567;
helpline[1]:=568;
helpline[0]:=569;
END;
Error;
30:
Bclose(tfmfile);
END;
{498}PROCEDURE Charwarning(f:internalfont;
c:eightbits);
BEGIN
IF eqtb[3616].int<>0 THEN
BEGIN
Begindiagnos;
Printnl(584);
Printascii(c);
Print(585);
Print(fontname[f]);
Printchar(33);
Enddiagnosti(false);
END;
END;
{499}
FUNCTION Newcharacter(f:internalfont;
c:eightbits):halfword;
LABEL
10;
VAR
p:halfword;
BEGIN
IF(fontbc[f]<=c)AND(fontec[f]>=c)THEN
IF(fontinfo[charbase[f]+c].
qqqq.b0>0)THEN
BEGIN
p:=Getavail;
mem[p].hh.b0:=f;
mem[p].hh.b1:=c;
Newcharacter:=p;
GOTO 10;
END;
Charwarning(f,c);
Newcharacter:=0;
10:
END;
{513}
PROCEDURE Aryout(VAR f:FILE;
b:packedbytes;
o,c:integer);
EXTERN;
PROCEDURE Writedvi(a,b:dviindex);
BEGIN
Aryout(dvifile,dvibuf,a DIV 4,(b+1-a)DIV 4);
END;
{514}
PROCEDURE Dviswap;
BEGIN
IF dvilimit=dvibufsize THEN
BEGIN
Writedvi(0,halfbuf-1);
dvilimit:=halfbuf;
dvioffset:=dvioffset+dvibufsize;
dviptr:=0;
END
ELSE
BEGIN
Writedvi(halfbuf,dvibufsize-1);
dvilimit:=dvibufsize;
END;
dvigone:=dvigone+halfbuf;
END;
{516}
PROCEDURE Dvifour(x:integer);
BEGIN
IF x>=0 THEN
BEGIN
dvibuf[dviptr]:=x DIV 16777216;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END
ELSE
BEGIN
x:=x+1073741824;
x:=x+1073741824;
BEGIN
dvibuf[dviptr]:=(x DIV 16777216)+128;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
END;
x:=x MOD 16777216;
BEGIN
dvibuf[dviptr]:=x DIV 65536;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
x:=x MOD 65536;
BEGIN
dvibuf[dviptr]:=x DIV 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
BEGIN
dvibuf[dviptr]:=x MOD 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
END;
{520}
PROCEDURE Movement(w:scaled;
o:eightbits);
LABEL
10,40,45,2,1;
VAR
mstate:smallnumber;
p,q:halfword;
k:integer;
BEGIN
q:=Getnode(3);
mem[q+1].int:=w;
mem[q+2].int:=dvioffset+dviptr;
IF o=157 THEN
BEGIN
mem[q].hh.rh:=downptr;
downptr:=q;
END
ELSE
BEGIN
mem[q].hh.rh:=rightptr;
rightptr:=q;
END;
{524}p:=mem[q].hh.rh;
mstate:=0;
WHILE p<>0 DO
BEGIN
IF mem[p+1].int=w THEN
{525}
CASE mstate+mem[p].hh.lh
OF
3,4,15,16:IF mem[p+2].int<dvigone THEN
GOTO 45
ELSE
{526}
BEGIN
k:=mem[
p+2].int-dvioffset;
IF k<0 THEN
k:=k+dvibufsize;
dvibuf[k]:=dvibuf[k]+5;
mem[p].hh.lh:=1;
GOTO 40;
END;
5,9,11:IF mem[p+2].int<dvigone THEN
GOTO 45
ELSE
{527}
BEGIN
k:=mem[p+2].
int-dvioffset;
IF k<0 THEN
k:=k+dvibufsize;
dvibuf[k]:=dvibuf[k]+10;
mem[p].hh.lh:=2;
GOTO 40;
END;
1,2,8,13:GOTO 40;
OTHERS:
END
ELSE
CASE mstate+mem[p].hh.lh OF
1:mstate:=6;
2:mstate:=12;
8,13:GOTO 45;
OTHERS:
END;
p:=mem[p].hh.rh;
END;
45:;
{523}mem[q].hh.lh:=3;
IF Abs(w)>=8388608 THEN
BEGIN
BEGIN
dvibuf[dviptr]:=o+3;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
Dvifour(w);
GOTO 10;
END;
IF Abs(w)>=32768 THEN
BEGIN
BEGIN
dvibuf[dviptr]:=o+2;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
IF w<0 THEN
w:=w+16777216;
BEGIN
dvibuf[dviptr]:=w DIV 65536;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
w:=w MOD 65536;
GOTO 2;
END;
IF Abs(w)>=128 THEN
BEGIN
BEGIN
dvibuf[dviptr]:=o+1;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
IF w<0 THEN
w:=w+65536;
GOTO 2;
END;
BEGIN
dvibuf[dviptr]:=o;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
IF w<0 THEN
w:=w+256;
GOTO 1;
2:
BEGIN
dvibuf[dviptr]:=w DIV 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
1:
BEGIN
dvibuf[dviptr]:=w MOD 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
GOTO 10;
40:{522}
mem[q].hh.lh:=mem[p].hh.lh;
IF mem[q].hh.lh=1 THEN
BEGIN
BEGIN
dvibuf[dviptr]:=o+4;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
WHILE mem[q].hh.rh<>p DO
BEGIN
q:=mem[q].hh.rh;
CASE mem[q].hh.lh OF
3:mem[q].hh.lh:=5;
4:mem[q].hh.lh:=6;
OTHERS:
END;
END;
END
ELSE
BEGIN
BEGIN
dvibuf[dviptr]:=o+9;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
WHILE mem[q].hh.rh<>p DO
BEGIN
q:=mem[q].hh.rh;
CASE mem[q].hh.lh OF
3:mem[q].hh.lh:=4;
5:mem[q].hh.lh:=6;
OTHERS:
END;
END;
END;
10:
END;
{528}
PROCEDURE Prunemovemen(l:integer);
LABEL
30,10;
VAR
p:halfword;
BEGIN
WHILE downptr<>0 DO
BEGIN
IF mem[downptr+2].int<l THEN
GOTO 30;
p:=downptr;
downptr:=mem[p].hh.rh;
Freenode(p,3);
END;
30:
WHILE rightptr<>0 DO
BEGIN
IF mem[rightptr+2].int<l THEN
GOTO 10;
p:=rightptr;
rightptr:=mem[p].hh.rh;
Freenode(p,3);
END;
10:
END;
{531}
PROCEDURE Vlistout;
FORWARD;
{532}{1246}
PROCEDURE Xsendout(p:halfword);
VAR
oldsetting:0..21;
k:poolpointer;
BEGIN
IF curh<>dvih THEN
BEGIN
Movement(curh-dvih,143);
dvih:=curh;
END;
IF curv<>dviv THEN
BEGIN
Movement(curv-dviv,157);
dviv:=curv;
END;
oldsetting:=selector;
selector:=21;
Showtokenlis(mem[mem[p+1].hh.rh].hh.rh,0,poolsize-poolptr);
selector:=oldsetting;
BEGIN
IF poolptr+1>poolsize THEN
Overflow(129,poolsize);
END;
IF(poolptr-strstart[strptr])<256 THEN
BEGIN
BEGIN
dvibuf[dviptr]:=239;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
BEGIN
dvibuf[dviptr]:=(poolptr-strstart[strptr]);
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
END
ELSE
BEGIN
BEGIN
dvibuf[dviptr]:=242;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
Dvifour((poolptr-strstart[strptr]));
END;
FOR k:=strstart[strptr]TO poolptr-1 DO
BEGIN
dvibuf[dviptr]:=strpool[k];
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
poolptr:=strstart[strptr];
END;
{1248}
PROCEDURE Sendout(p:halfword);
VAR
oldsetting:0..21;
oldmode:integer;
j:smallnumber;
q,r:halfword;
BEGIN{1249}
q:=Getavail;
mem[q].hh.lh:=637;
r:=Getavail;
mem[r].hh.lh:=2592;
mem[q].hh.rh:=r;
mem[r].hh.rh:=Getavail;
r:=mem[r].hh.rh;
mem[r].hh.lh:=6456;
Begintokenli(q,3);
Begintokenli(mem[p+1].hh.rh,8);
q:=Getavail;
mem[q].hh.lh:=379;
Begintokenli(q,3);
oldmode:=curlist.modefield;
curlist.modefield:=0;
csptr:=sendloc;
q:=Scantoks(false,true);
Gettoken;
IF curtok<>6456 THEN
Confusion(1050);
Endtokenlist;
curlist.modefield:=oldmode;
oldsetting:=selector;
j:=mem[p+1].hh.lh;
IF sendopen[j]THEN
selector:=j
ELSE
Printnl(226);
Showtokenlis(mem[defref].hh.rh,0,bufsize-10);
Println;
Flushlist(defref);
selector:=oldsetting;
END;
{1250}
PROCEDURE Outwhat(p:halfword);
VAR
j:smallnumber;
BEGIN
CASE mem[p].hh.b1 OF
0,1,2:{1251}IF NOT doingleaders THEN
BEGIN
j
:=mem[p+1].hh.lh;
IF mem[p].hh.b1=1 THEN
Sendout(p)
ELSE
BEGIN
IF sendopen[j]THEN
Aclose(
sendfile[j]);
IF mem[p].hh.b1=2 THEN
sendopen[j]:=false
ELSE
BEGIN
curname:=mem[p+1].
hh.rh;
curarea:=mem[p+2].hh.lh;
curext:=mem[p+2].hh.rh;
IF curext=226 THEN
curext:=550;
Packfilename(curname,curarea,curext);
WHILE NOT Aopenout(sendfile[j])DO Promptfilena(1060,550);
sendopen[j]:=true;
END;
END;
END;
3:Xsendout(p);
OTHERS:Confusion(1059)
END;
END;
PROCEDURE Hlistout;
LABEL
21,13,14,15;
VAR
baseline:scaled;
saveh,savev:scaled;
thisbox:halfword;
gorder:glueord;
gsign:0..2;
p:halfword;
saveloc:integer;
leaderbox:halfword;
leaderwd:scaled;
outerdoingle:boolean;
edge:scaled;
BEGIN
thisbox:=tempptr;
gorder:=mem[thisbox+5].hh.b1;
gsign:=mem[thisbox+5].hh.b0;
p:=mem[thisbox+5].hh.rh;
curs:=curs+1;
IF curs>maxpush THEN
maxpush:=curs;
saveloc:=dvioffset+dviptr;
baseline:=curv;
WHILE p<>0 DO{533}21:
IF(p>10000)THEN
BEGIN
IF curh<>dvih THEN
BEGIN
Movement(curh-dvih,143);
dvih:=curh;
END;
IF curv<>dviv THEN
BEGIN
Movement(curv-dviv,157);
dviv:=curv;
END;
REPEAT
f:=mem[p].hh.b0;
c:=mem[p].hh.b1;
IF f<>dvif THEN
{534}
BEGIN
IF f<=64 THEN
BEGIN
dvibuf[dviptr]:=f+170;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END
ELSE
BEGIN
BEGIN
dvibuf[dviptr]:=235;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
BEGIN
dvibuf[dviptr]:=f-1;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
END;
dvif:=f;
fontused[f]:=true;
END;
IF c<128 THEN
BEGIN
dvibuf[dviptr]:=c;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END
ELSE
BEGIN
BEGIN
dvibuf[dviptr]:=128;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
BEGIN
dvibuf[dviptr]:=c;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
END;
curh:=curh+fontinfo[widthbase[f]+fontinfo[charbase[f]+c].qqqq.b0].int;
p:=mem[p].hh.rh;
UNTIL NOT(p>10000);
dvih:=curh;
END
ELSE
IF p<>0 THEN
{535}
BEGIN
CASE mem[p].hh.b0 OF
0,1:{536}IF mem[p+5
].hh.rh=0 THEN
curh:=curh+mem[p+1].int
ELSE
BEGIN
saveh:=dvih;
savev:=dviv;
BEGIN
dvibuf[dviptr]:=141;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
curv:=baseline+mem[p+4].int;
tempptr:=p;
edge:=curh;
IF mem[p].hh.b0=1 THEN
Vlistout
ELSE
Hlistout;
BEGIN
dvibuf[dviptr]:=142;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
dvih:=saveh;
dviv:=savev;
curh:=edge+mem[p+1].int;
curv:=baseline;
END;
2:BEGIN
ruleht:=mem[p+3].int;
ruledp:=mem[p+2].int;
rulewd:=mem[p+1].int;
GOTO 14;
END;
8:{1244}Outwhat(p);
10:{538}BEGIN
g:=mem[p+1].hh.lh;
rulewd:=mem[g+1].int;
IF gsign<>0 THEN
BEGIN
IF gsign=1 THEN
BEGIN
IF mem[g].hh.b0=gorder THEN
rulewd:=rulewd+Round(mem[thisbox+6].gr*mem[g+2].int);
END
ELSE
BEGIN
IF mem[g].hh.b1=gorder THEN
rulewd:=rulewd-Round(mem[
thisbox+6].gr*mem[g+3].int);
END;
END;
IF mem[p].hh.b1>=100 THEN
{539}
BEGIN
leaderbox:=mem[p+1].hh.rh;
IF mem[leaderbox].hh.b0=2 THEN
BEGIN
ruleht:=mem[leaderbox+3].int;
ruledp:=mem[leaderbox+2].int;
GOTO 14;
END;
leaderwd:=mem[leaderbox+1].int;
IF(leaderwd>0)AND(rulewd>0)THEN
BEGIN
edge:=curh+rulewd;
{540}
IF mem[p].hh.b1=100 THEN
BEGIN
saveh:=curh;
curh:=leaderwd*(curh DIV leaderwd);
IF curh<saveh THEN
curh:=curh+leaderwd;
END
ELSE
BEGIN
lq:=rulewd DIV leaderwd;
lr:=rulewd MOD leaderwd;
IF mem[p].hh.b1=101 THEN
curh:=curh+(lr DIV 2)
ELSE
BEGIN
lx:=(2*lr+lq+1)
DIV(2*lq+2);
leaderwd:=leaderwd+lx;
curh:=curh+((lr-(lq-1)*lx)DIV 2);
END;
END;
WHILE curh+leaderwd<=edge DO{541}
BEGIN
curv:=baseline+mem[leaderbox+4].
int;
IF curv<>dviv THEN
BEGIN
Movement(curv-dviv,157);
dviv:=curv;
END;
savev:=dviv;
IF curh<>dvih THEN
BEGIN
Movement(curh-dvih,143);
dvih:=curh;
END;
saveh:=dvih;
BEGIN
dvibuf[dviptr]:=141;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
tempptr:=leaderbox;
outerdoingle:=doingleaders;
doingleaders:=true;
IF mem[leaderbox].hh.b0=1 THEN
Vlistout
ELSE
Hlistout;
doingleaders:=outerdoingle;
BEGIN
dvibuf[dviptr]:=142;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
dviv:=savev;
dvih:=saveh;
curv:=savev;
curh:=saveh+leaderwd;
END;
curh:=edge;
GOTO 15;
END;
END;
GOTO 13;
END;
11,9:curh:=curh+mem[p+1].int;
6:{563}BEGIN
mem[10011]:=mem[p+1];
mem[10011].hh.rh:=mem[p].hh.rh;
p:=10011;
GOTO 21;
END;
OTHERS:
END;
GOTO 15;
14:{537}
IF(ruleht=-1073741824)THEN
ruleht:=mem[thisbox+3].int;
IF(ruledp=-1073741824)THEN
ruledp:=mem[thisbox+2].int;
ruleht:=ruleht+ruledp;
IF(ruleht>0)AND(rulewd>0)THEN
BEGIN
IF curh<>dvih THEN
BEGIN
Movement(
curh-dvih,143);
dvih:=curh;
END;
curv:=baseline+ruledp;
IF curv<>dviv THEN
BEGIN
Movement(curv-dviv,157);
dviv:=curv;
END;
BEGIN
dvibuf[dviptr]:=132;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
Dvifour(ruleht);
Dvifour(rulewd);
curv:=baseline;
dvih:=dvih+rulewd;
END;
13:
curh:=curh+rulewd;
15:
p:=mem[p].hh.rh;
END;
Prunemovemen(saveloc);
curs:=curs-1;
END;
{542}PROCEDURE Vlistout;
LABEL
13,14,15;
VAR
leftedge:scaled;
saveh,savev:scaled;
thisbox:halfword;
gorder:glueord;
gsign:0..2;
p:halfword;
saveloc:integer;
leaderbox:halfword;
leaderht:scaled;
outerdoingle:boolean;
edge:scaled;
BEGIN
thisbox:=tempptr;
gorder:=mem[thisbox+5].hh.b1;
gsign:=mem[thisbox+5].hh.b0;
p:=mem[thisbox+5].hh.rh;
curs:=curs+1;
IF curs>maxpush THEN
maxpush:=curs;
saveloc:=dvioffset+dviptr;
leftedge:=curh;
curv:=curv-mem[thisbox+3].int;
WHILE p<>0 DO{543}
BEGIN
IF(p>10000)THEN
Confusion(586)
ELSE
{544}
BEGIN
CASE mem[p].hh.b0 OF
0,1:{545}IF mem[p+5].hh.rh=0 THEN
curv:=curv+mem[p
+3].int+mem[p+2].int
ELSE
BEGIN
curv:=curv+mem[p+3].int;
IF curv<>dviv THEN
BEGIN
Movement(curv-dviv,157);
dviv:=curv;
END;
saveh:=dvih;
savev:=dviv;
BEGIN
dvibuf[dviptr]:=141;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
curh:=leftedge+mem[p+4].int;
tempptr:=p;
IF mem[p].hh.b0=1 THEN
Vlistout
ELSE
Hlistout;
BEGIN
dvibuf[dviptr]:=142;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
dvih:=saveh;
dviv:=savev;
curv:=savev+mem[p+2].int;
curh:=leftedge;
END;
2:BEGIN
ruleht:=mem[p+3].int;
ruledp:=mem[p+2].int;
rulewd:=mem[p+1].int;
GOTO 14;
END;
8:{1243}Outwhat(p);
10:{547}BEGIN
g:=mem[p+1].hh.lh;
ruleht:=mem[g+1].int;
IF gsign<>0 THEN
BEGIN
IF gsign=1 THEN
BEGIN
IF mem[g].hh.b0=gorder THEN
ruleht:=ruleht+Round(mem[thisbox+6].gr*mem[g+2].int);
END
ELSE
BEGIN
IF mem[g].hh.b1=gorder THEN
ruleht:=ruleht-Round(mem[
thisbox+6].gr*mem[g+3].int);
END;
END;
IF mem[p].hh.b1>=100 THEN
{548}
BEGIN
leaderbox:=mem[p+1].hh.rh;
IF mem[leaderbox].hh.b0=2 THEN
BEGIN
rulewd:=mem[leaderbox+1].int;
ruledp:=0;
GOTO 14;
END;
leaderht:=mem[leaderbox+3].int+mem[leaderbox+2].int;
IF(leaderht>0)AND(ruleht>0)THEN
BEGIN
edge:=curv+ruleht;
{549}
IF mem[p].hh.b1=100 THEN
BEGIN
savev:=curv;
curv:=leaderht*(curv DIV leaderht);
IF curv<savev THEN
curv:=curv+leaderht;
END
ELSE
BEGIN
lq:=ruleht DIV leaderht;
lr:=ruleht MOD leaderht;
IF mem[p].hh.b1=101 THEN
curv:=curv+(lr DIV 2)
ELSE
BEGIN
lx:=(2*lr+lq+1)
DIV(2*lq+2);
leaderht:=leaderht+lx;
curv:=curv+((lr-(lq-1)*lx)DIV 2);
END;
END;
WHILE curv+leaderht<=edge DO{550}
BEGIN
curh:=leftedge+mem[leaderbox+4].
int;
IF curh<>dvih THEN
BEGIN
Movement(curh-dvih,143);
dvih:=curh;
END;
saveh:=dvih;
curv:=curv+mem[leaderbox+3].int;
IF curv<>dviv THEN
BEGIN
Movement(curv-dviv,157);
dviv:=curv;
END;
savev:=dviv;
BEGIN
dvibuf[dviptr]:=141;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
tempptr:=leaderbox;
outerdoingle:=doingleaders;
doingleaders:=true;
IF mem[leaderbox].hh.b0=1 THEN
Vlistout
ELSE
Hlistout;
doingleaders:=outerdoingle;
BEGIN
dvibuf[dviptr]:=142;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
dviv:=savev;
dvih:=saveh;
curh:=saveh;
curv:=savev-mem[leaderbox+3].int+leaderht;
END;
curv:=edge;
GOTO 15;
END;
END;
GOTO 13;
END;
11:curv:=curv+mem[p+1].int;
OTHERS:
END;
GOTO 15;
14:{546}
IF(rulewd=-1073741824)THEN
rulewd:=mem[thisbox+1].int;
ruleht:=ruleht+ruledp;
curv:=curv+ruleht;
IF(ruleht>0)AND(rulewd>0)THEN
BEGIN
IF curh<>dvih THEN
BEGIN
Movement(
curh-dvih,143);
dvih:=curh;
END;
IF curv<>dviv THEN
BEGIN
Movement(curv-dviv,157);
dviv:=curv;
END;
BEGIN
dvibuf[dviptr]:=137;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
Dvifour(ruleht);
Dvifour(rulewd);
END;
GOTO 15;
13:
curv:=curv+ruleht;
END;
15:
p:=mem[p].hh.rh;
END;
Prunemovemen(saveloc);
curs:=curs-1;
END;
{551}PROCEDURE Shipout(p:halfword);
VAR
pageloc:integer;
k:0..9;
BEGIN
IF eqtb[3615].int=0 THEN
BEGIN
IF termoffset>maxprintline-9 THEN
Println
ELSE
Printchar(32);
Printchar(91);
Printint(eqtb[3622].int);
Break(termout);
END
ELSE
BEGIN
Printnl(226);
Println;
Print(587);
FOR k:=0 TO 9 DO
BEGIN
Printint(eqtb[3622+k].int);
IF k<9 THEN
Printchar(46);
END;
Printchar(93);
Begindiagnos;
Showbox(p);
Enddiagnosti(true);
END;
{553}
IF mem[p+3].int+mem[p+2].int>maxv THEN
maxv:=mem[p+3].int+mem[p+2].
int;
IF mem[p+1].int>maxh THEN
maxh:=mem[p+1].int;
{530}dvih:=0;
dviv:=0;
curh:=0;
dvif:=0;
curs:=-1;
IF outputfilena=0 THEN
BEGIN
IF jobname=0 THEN
Openlogfile;
Packjobname(554);
WHILE NOT Bopenout(dvifile)DO Promptfilena(555,554);
outputfilena:=Bmakenamestr(dvifile);
END;
;
pageloc:=dvioffset+dviptr;
BEGIN
dvibuf[dviptr]:=139;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
FOR k:=0 TO 9 DO Dvifour(eqtb[3622+k].int);
Dvifour(lastbop);
lastbop:=pageloc;
curv:=mem[p+3].int;
tempptr:=p;
IF mem[p].hh.b0=1 THEN
Vlistout
ELSE
Hlistout;
BEGIN
dvibuf[dviptr]:=140;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
Dviswap;
END;
totalpages:=totalpages+1;
deadcycles:=0;
IF eqtb[3615].int=0 THEN
Printchar(93);
Break(termout);
{552}
IF eqtb[3614].int>1 THEN
BEGIN
Printnl(588);
Printint(varused);
Printchar(38);
Printint(dynused);
Printchar(59);
END;
Flushnodelis(p);
IF eqtb[3614].int>1 THEN
BEGIN
Print(589);
Printint(varused);
Printchar(38);
Printint(dynused);
Print(590);
Printint(maxvarused);
Printchar(38);
Printint(memend-9999);
Println;
END;
;
END;
{558}
PROCEDURE Scanspec;
LABEL
40;
BEGIN
IF Scankeyword(596)THEN
savestack[saveptr+0].int:=0
ELSE
IF
Scankeyword(597)THEN
savestack[saveptr+0].int:=1
ELSE
BEGIN
savestack[
saveptr+0].int:=1;
savestack[saveptr+1].int:=0;
GOTO 40;
END;
Scandimen(false,false,false);
savestack[saveptr+1].int:=curval;
40:
saveptr:=saveptr+2;
Scanleftbrac;
END;
{560}
FUNCTION Hpack(p:halfword;
w:scaled;
m:smallnumber):halfword;
LABEL
21,50,10;
VAR
r:halfword;
q:halfword;
h,d,x:scaled;
s:scaled;
g:halfword;
o:glueord;
f:internalfont;
i:fourquarters;
hd:quarterword;
t:halfword;
b:integer;
BEGIN
r:=Getnode(7);
mem[r].hh.b0:=0;
mem[r].hh.b1:=0;
mem[r+4].int:=0;
q:=r+5;
mem[q].hh.rh:=p;
t:=10005;
h:=0;
{561}d:=0;
x:=0;
FOR o:=0 TO 3 DO
BEGIN
totalstretch[o]:=0;
totalshrink[o]:=0;
END;
WHILE p<>0 DO{562}
BEGIN
21:
WHILE(p>10000)DO{565}
BEGIN
f:=mem[p].hh.b0;
i:=fontinfo[charbase[f]+mem[p].hh.b1].qqqq;
hd:=i.b1;
x:=x+fontinfo[widthbase[f]+i.b0].int;
s:=fontinfo[heightbase[f]+hd DIV 16].int;
IF s>h THEN
h:=s;
s:=fontinfo[depthbase[f]+hd MOD 16].int;
IF s>d THEN
d:=s;
p:=mem[p].hh.rh;
END;
IF p<>0 THEN
BEGIN
CASE mem[p].hh.b0 OF
0,1,2,13:{564}BEGIN
x:=x+mem[p+1
].int;
IF mem[p].hh.b0>=2 THEN
s:=0
ELSE
s:=mem[p+4].int;
IF mem[p+3].int-s>h THEN
h:=mem[p+3].int-s;
IF mem[p+2].int+s>d THEN
d:=mem[p+2].int+s;
END;
3,4,5:{566}BEGIN
WHILE mem[q].hh.rh<>p DO q:=mem[q].hh.rh;
IF mem[p].hh.b0=5 THEN
BEGIN
mem[t].hh.rh:=mem[p+1].int;
WHILE mem[t].hh.rh<>0 DO t:=mem[t].hh.rh;
p:=mem[p].hh.rh;
Freenode(mem[q].hh.rh,2);
END
ELSE
BEGIN
mem[t].hh.rh:=p;
t:=p;
p:=mem[p].hh.rh;
END;
mem[q].hh.rh:=p;
p:=q;
END;
8:{1238};
10:{567}BEGIN
g:=mem[p+1].hh.lh;
x:=x+mem[g+1].int;
o:=mem[g].hh.b0;
totalstretch[o]:=totalstretch[o]+mem[g+2].int;
o:=mem[g].hh.b1;
totalshrink[o]:=totalshrink[o]+mem[g+3].int;
END;
11,9:x:=x+mem[p+1].int;
6:{563}BEGIN
mem[10011]:=mem[p+1];
mem[10011].hh.rh:=mem[p].hh.rh;
p:=10011;
GOTO 21;
END;
OTHERS:
END;
p:=mem[p].hh.rh;
END;
END;
mem[t].hh.rh:=0;
mem[r+3].int:=h;
mem[r+2].int:=d;
{568}
IF m=1 THEN
w:=x+w;
mem[r+1].int:=w;
x:=w-x;
IF x=0 THEN
BEGIN
mem[r+5].hh.b0:=0;
mem[r+5].hh.b1:=0;
mem[r+6].gr:=0.0;
GOTO 10;
END
ELSE
IF x>0 THEN
{569}
BEGIN{570}
IF totalstretch[3]<>0 THEN
o:=3
ELSE
IF totalstretch[2]<>0 THEN
o:=2
ELSE
IF totalstretch[1]<>0 THEN
o:=1
ELSE
o:=0;
mem[r+5].hh.b1:=o;
mem[r+5].hh.b0:=1;
IF totalstretch[o]=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=x/
totalstretch[o];
IF(eqtb[3609].int<10000)AND(o=0)AND(mem[r+5].hh.rh<>0)THEN
{571}
BEGIN
b:=
Badness(x,totalstretch[0]);
IF b>eqtb[3609].int THEN
BEGIN
Println;
IF b>100 THEN
Printnl(598)
ELSE
Printnl(599);
Print(600);
Printint(b);
GOTO 50;
END;
END;
GOTO 10;
END
ELSE
{575}
BEGIN{576}
IF totalshrink[3]<>0 THEN
o:=3
ELSE
IF
totalshrink[2]<>0 THEN
o:=2
ELSE
IF totalshrink[1]<>0 THEN
o:=1
ELSE
o:=
0;
mem[r+5].hh.b1:=o;
mem[r+5].hh.b0:=2;
IF totalshrink[o]=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=-x/
totalshrink[o];
IF(totalshrink[o]<-x)AND(o=0)AND(mem[r+5].hh.rh<>0)THEN
BEGIN
mem[r+6].
gr:=1.0;
{577}
IF-x-totalshrink[0]>eqtb[4014].int THEN
BEGIN
IF eqtb[4022].int>0
THEN
BEGIN
WHILE mem[q].hh.rh<>0 DO q:=mem[q].hh.rh;
mem[q].hh.rh:=Newrule;
mem[mem[q].hh.rh+1].int:=eqtb[4022].int;
END;
Println;
Printnl(605);
Printscaled(-x-totalshrink[0]);
Print(606);
GOTO 50;
END;
END
ELSE
IF(eqtb[3609].int<100)AND(o=0)AND(mem[r+5].hh.rh<>0)THEN
{578}
BEGIN
b:=Badness(-x,totalshrink[0]);
IF b>eqtb[3609].int THEN
BEGIN
Println;
Printnl(607);
Printint(b);
GOTO 50;
END;
END;
GOTO 10;
END;
50:{574}
IF outputactive THEN
Print(601)
ELSE
BEGIN
IF parbeginline<>0
THEN
BEGIN
Print(602);
Printint(parbeginline);
Print(603);
END
ELSE
Print(604);
Printint(line);
END;
Println;
fontinshortd:=0;
Shortdisplay(mem[r+5].hh.rh);
Println;
Begindiagnos;
Showbox(r);
Enddiagnosti(true);
10:
Hpack:=r;
END;
{579}
FUNCTION Vpackage(p:halfword;
h:scaled;
m:smallnumber;
l:scaled):halfword;
LABEL
50,10;
VAR
r:halfword;
w,d,x:scaled;
s:scaled;
g:halfword;
o:glueord;
b:integer;
BEGIN
r:=Getnode(7);
mem[r].hh.b0:=1;
mem[r].hh.b1:=0;
mem[r+4].int:=0;
mem[r+5].hh.rh:=p;
w:=0;
{561}d:=0;
x:=0;
FOR o:=0 TO 3 DO
BEGIN
totalstretch[o]:=0;
totalshrink[o]:=0;
END;
WHILE p<>0 DO{580}
BEGIN
IF(p>10000)THEN
Confusion(608)
ELSE
CASE mem[p].
hh.b0 OF
0,1,2,13:{581}BEGIN
x:=x+d+mem[p+3].int;
d:=mem[p+2].int;
IF mem[p].hh.b0>=2 THEN
s:=0
ELSE
s:=mem[p+4].int;
IF mem[p+1].int+s>w THEN
w:=mem[p+1].int+s;
END;
8:{1237};
10:BEGIN
x:=x+d;
d:=0;
{567}
BEGIN
g:=mem[p+1].hh.lh;
x:=x+mem[g+1].int;
o:=mem[g].hh.b0;
totalstretch[o]:=totalstretch[o]+mem[g+2].int;
o:=mem[g].hh.b1;
totalshrink[o]:=totalshrink[o]+mem[g+3].int;
END;
END;
11:BEGIN
x:=x+d+mem[p+1].int;
d:=0;
END;
OTHERS:
END;
p:=mem[p].hh.rh;
END;
mem[r+1].int:=w;
IF d>l THEN
BEGIN
x:=x+d-l;
mem[r+2].int:=l;
END
ELSE
mem[r+2].int:=d;
{582}
IF m=1 THEN
h:=x+h;
mem[r+3].int:=h;
x:=h-x;
IF x=0 THEN
BEGIN
mem[r+5].hh.b0:=0;
mem[r+5].hh.b1:=0;
mem[r+6].gr:=0.0;
GOTO 10;
END
ELSE
IF x>0 THEN
{583}
BEGIN{570}
IF totalstretch[3]<>0 THEN
o:=3
ELSE
IF totalstretch[2]<>0 THEN
o:=2
ELSE
IF totalstretch[1]<>0 THEN
o:=1
ELSE
o:=0;
mem[r+5].hh.b1:=o;
mem[r+5].hh.b0:=1;
IF totalstretch[o]=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=x/
totalstretch[o];
IF(eqtb[3610].int<10000)AND(o=0)AND(mem[r+5].hh.rh<>0)THEN
{584}
BEGIN
b:=
Badness(x,totalstretch[0]);
IF b>eqtb[3610].int THEN
BEGIN
Println;
IF b>100 THEN
Printnl(598)
ELSE
Printnl(599);
Print(609);
Printint(b);
GOTO 50;
END;
END;
GOTO 10;
END
ELSE
{586}
BEGIN{576}
IF totalshrink[3]<>0 THEN
o:=3
ELSE
IF
totalshrink[2]<>0 THEN
o:=2
ELSE
IF totalshrink[1]<>0 THEN
o:=1
ELSE
o:=
0;
mem[r+5].hh.b1:=o;
mem[r+5].hh.b0:=2;
IF totalshrink[o]=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=-x/
totalshrink[o];
IF(totalshrink[o]<-x)AND(o=0)AND(mem[r+5].hh.rh<>0)THEN
BEGIN
mem[r+6].
gr:=1.0;
{587}
IF-x-totalshrink[0]>eqtb[4015].int THEN
BEGIN
Println;
Printnl(610);
Printscaled(-x-totalshrink[0]);
Print(611);
GOTO 50;
END;
END
ELSE
IF(eqtb[3610].int<100)AND(o=0)AND(mem[r+5].hh.rh<>0)THEN
{588}
BEGIN
b:=Badness(-x,totalshrink[0]);
IF b>eqtb[3610].int THEN
BEGIN
Println;
Printnl(612);
Printint(b);
GOTO 50;
END;
END;
GOTO 10;
END;
50:{585}
IF outputactive THEN
Print(601)
ELSE
BEGIN
Print(604);
Printint(line);
Println;
END;
Begindiagnos;
Showbox(r);
Enddiagnosti(true);
10:
Vpackage:=r;
END;
{589}
PROCEDURE Appendtovlis(b:halfword);
VAR
d:scaled;
p:halfword;
BEGIN
IF curlist.auxfield<>-65536000 THEN
BEGIN
d:=mem[eqtb[2363].hh.rh
+1].int-curlist.auxfield-mem[b+3].int;
IF d<eqtb[4009].int THEN
p:=Newparamglue(0)
ELSE
BEGIN
p:=Newskipparam(1)
;
mem[tempptr+1].int:=d;
END;
mem[curlist.tailfield].hh.rh:=p;
curlist.tailfield:=p;
END;
mem[curlist.tailfield].hh.rh:=b;
curlist.tailfield:=b;
curlist.auxfield:=mem[b+2].int;
END;
{596}
FUNCTION Newnoad:halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(4);
mem[p].hh.b0:=22;
mem[p].hh.b1:=0;
mem[p+1].hh:=emptyfield;
mem[p+3].hh:=emptyfield;
mem[p+2].hh:=emptyfield;
Newnoad:=p;
END;
{598}
FUNCTION Newstyle(s:smallnumber):halfword;
VAR
p:halfword;
BEGIN
p:=Getnode(2);
mem[p].hh.b0:=14;
mem[p].hh.b1:=s;
mem[p+1].int:=0;
Newstyle:=p;
END;
{602}PROCEDURE Showinfo;
BEGIN
Shownodelist(mem[tempptr].hh.lh);
END;
{611}
FUNCTION Fractionrule(t:scaled):halfword;
VAR
p:halfword;
BEGIN
p:=Newrule;
mem[p+3].int:=t;
mem[p+2].int:=0;
Fractionrule:=p;
END;
{612}
FUNCTION Overbar(b:halfword;
k,t:scaled):halfword;
VAR
p,q:halfword;
BEGIN
p:=Newkern(k);
mem[p].hh.rh:=b;
q:=Fractionrule(t);
mem[q].hh.rh:=p;
p:=Newkern(t);
mem[p].hh.rh:=q;
Overbar:=Vpackage(p,0,1,1073741823);
END;
{613}{616}
FUNCTION Charbox(f:internalfont;
c:quarterword):halfword;
VAR
q:fourquarters;
hd:eightbits;
b,p:halfword;
BEGIN
q:=fontinfo[charbase[f]+c].qqqq;
hd:=q.b1;
b:=Newnullbox;
mem[b+1].int:=fontinfo[widthbase[f]+q.b0].int+fontinfo[italicbase[f]+q.
b2 DIV 4].int;
mem[b+3].int:=fontinfo[heightbase[f]+hd DIV 16].int;
mem[b+2].int:=fontinfo[heightbase[f]+hd DIV 16].int;
p:=Getavail;
mem[p].hh.b1:=c;
mem[p].hh.b0:=f;
mem[b+5].hh.rh:=p;
Charbox:=b;
END;
{618}
PROCEDURE Stackintobox(b:halfword;
f:internalfont;
c:quarterword);
VAR
p:halfword;
BEGIN
p:=Charbox(f,c);
mem[p].hh.rh:=mem[b+5].hh.rh;
mem[b+5].hh.rh:=p;
mem[b+3].int:=mem[p+3].int;
END;
{619}
FUNCTION Heightplusde(f:internalfont;
c:quarterword):scaled;
VAR
q:fourquarters;
hd:eightbits;
BEGIN
q:=fontinfo[charbase[f]+c].qqqq;
hd:=q.b1;
Heightplusde:=fontinfo[heightbase[f]+hd DIV 16].int+fontinfo[depthbase[f
]+hd MOD 16].int;
END;
FUNCTION Vardelimiter(d:halfword;
s:smallnumber;
v:scaled):halfword;
LABEL
40,22;
VAR
b:halfword;
f,g:internalfont;
c,x,y:quarterword;
m,n:integer;
u:scaled;
w:scaled;
q:fourquarters;
hd:eightbits;
r:fourquarters;
p:halfword;
z:smallnumber;
largeattempt:boolean;
BEGIN
f:=0;
w:=0;
largeattempt:=false;
z:=mem[d].qqqq.b0;
x:=mem[d].qqqq.b1;
WHILE true DO
BEGIN{614}
IF(z<>0)OR(x<>0)THEN
BEGIN
z:=z+s+16;
REPEAT
z:=z-16;
g:=eqtb[2895+z].hh.rh;
IF g<>0 THEN
{615}
BEGIN
y:=x;
22:
IF(y>=fontbc[g])AND(y<=fontec[g])THEN
BEGIN
q:=fontinfo[charbase[g]+y
].qqqq;
IF(q.b0>0)THEN
BEGIN
IF(q.b2 MOD 4)=3 THEN
BEGIN
f:=g;
c:=y;
GOTO 40;
END;
hd:=q.b1;
u:=fontinfo[heightbase[g]+hd DIV 16].int+fontinfo[depthbase[g]+hd MOD 16
].int;
IF u>w THEN
BEGIN
f:=g;
c:=y;
w:=u;
IF u>=v THEN
GOTO 40;
END;
IF(q.b2 MOD 4)=2 THEN
BEGIN
y:=q.b3;
GOTO 22;
END;
END;
END;
END;
UNTIL z<16;
END;
IF largeattempt THEN
GOTO 40;
largeattempt:=true;
z:=mem[d].qqqq.b2;
x:=mem[d].qqqq.b3;
END;
40:
IF f<>0 THEN
{617}
IF(q.b2 MOD 4)=3 THEN
{620}
BEGIN
b:=Newnullbox;
mem[b].hh.b0:=1;
r:=fontinfo[extenbase[f]+q.b3].qqqq;
{621}c:=r.b3;
u:=Heightplusde(f,c);
w:=0;
q:=fontinfo[charbase[f]+c].qqqq;
mem[b+1].int:=fontinfo[widthbase[f]+q.b0].int+fontinfo[italicbase[f]+q.
b2 DIV 4].int;
c:=r.b2;
IF c<>0 THEN
w:=w+Heightplusde(f,c);
c:=r.b1;
IF c<>0 THEN
w:=w+Heightplusde(f,c);
c:=r.b0;
IF c<>0 THEN
w:=w+Heightplusde(f,c);
n:=0;
IF u>0 THEN
WHILE w<v DO
BEGIN
w:=w+u;
n:=n+1;
IF r.b1<>0 THEN
w:=w+u;
END;
c:=r.b2;
IF c<>0 THEN
Stackintobox(b,f,c);
c:=r.b3;
FOR m:=1 TO n DO Stackintobox(b,f,c);
c:=r.b1;
IF c<>0 THEN
BEGIN
Stackintobox(b,f,c);
c:=r.b3;
FOR m:=1 TO n DO Stackintobox(b,f,c);
END;
c:=r.b0;
IF c<>0 THEN
Stackintobox(b,f,c);
mem[b+2].int:=w-mem[b+3].int;
END
ELSE
b:=Charbox(f,c)
ELSE
BEGIN
b:=Newnullbox;
mem[b+1].int:=eqtb[4017].int;
END;
mem[b+4].int:=Half(mem[b+3].int-mem[b+2].int)-fontinfo[22+parambase[eqtb
[2897+s].hh.rh]].int;
Vardelimiter:=b;
END;
{622}
FUNCTION Rebox(b:halfword;
w:scaled):halfword;
VAR
p:halfword;
BEGIN
IF(mem[b+1].int<>w)AND(mem[b+5].hh.rh<>0)THEN
BEGIN
p:=mem[b+5].hh
.rh;
Freenode(b,7);
b:=Newglue(12);
mem[b].hh.rh:=p;
WHILE mem[p].hh.rh<>0 DO p:=mem[p].hh.rh;
mem[p].hh.rh:=Newglue(12);
Rebox:=Hpack(b,w,0);
END
ELSE
BEGIN
mem[b+1].int:=w;
Rebox:=b;
END;
END;
{623}
FUNCTION Mathglue(g:halfword;
m:scaled):halfword;
VAR
p:halfword;
n:integer;
f:scaled;
BEGIN
n:=Xovern(m,65536);
f:=remainder;
p:=Getnode(4);
mem[p+1].int:=Nxplusy(n,mem[g+1].int,Xnoverd(mem[g+1].int,f,65536));
mem[p].hh.b0:=mem[g].hh.b0;
IF mem[p].hh.b0=0 THEN
mem[p+2].int:=Nxplusy(n,mem[g+2].int,Xnoverd(mem[
g+2].int,f,65536))
ELSE
mem[p+2].int:=mem[g+2].int;
mem[p].hh.b1:=mem[g].hh.b1;
IF mem[p].hh.b1=0 THEN
mem[p+3].int:=Nxplusy(n,mem[g+3].int,Xnoverd(mem[
g+3].int,f,65536))
ELSE
mem[p+3].int:=mem[g+3].int;
Mathglue:=p;
END;
{624}
PROCEDURE Mathkern(p:halfword;
m:scaled);
VAR
n:integer;
f:scaled;
BEGIN
IF mem[p].hh.b1=99 THEN
BEGIN
n:=Xovern(m,65536);
f:=remainder;
mem[p+1].int:=Nxplusy(n,mem[p+1].int,Xnoverd(mem[p+1].int,f,65536));
mem[p].hh.b1:=0;
END;
END;
{626}
PROCEDURE Mlisttohlist;
FORWARD;
FUNCTION Cleanbox(p:halfword;
s:smallnumber):halfword;
LABEL
40,10;
VAR
q:halfword;
savestyle:smallnumber;
BEGIN
CASE mem[p].hh.rh OF
1:BEGIN
curmlist:=Newnoad;
mem[curmlist+1]:=mem[p];
mem[curmlist].hh.b0:=15;
END;
2:BEGIN
q:=mem[p].hh.lh;
IF mem[q+4].int=0 THEN
BEGIN
Cleanbox:=q;
GOTO 10;
END
ELSE
GOTO 40;
END;
3:curmlist:=mem[p].hh.lh;
OTHERS:BEGIN
q:=0;
GOTO 40;
END
END;
savestyle:=curstyle;
curstyle:=s;
mlistpenalti:=false;
Mlisttohlist;
q:=mem[10003].hh.rh;
curstyle:=savestyle;
{610}
BEGIN
IF curstyle<4 THEN
cursize:=0
ELSE
cursize:=16*((curstyle-2)
DIV 2);
curmu:=Xovern(fontinfo[6+parambase[eqtb[2897+cursize].hh.rh]].int,18);
END;
40:
Cleanbox:=Hpack(q,0,1);
10:
END;
{627}
PROCEDURE Fetch(a:halfword);
BEGIN
curc:=mem[a].hh.b1;
curf:=eqtb[2895+mem[a].hh.b0+cursize].hh.rh;
IF curf=0 THEN
{628}
BEGIN
Printnl(639);
Printsize(cursize);
Print(32);
Printint(mem[a].hh.b0);
Print(640);
BEGIN
helpptr:=3;
helpline[2]:=641;
helpline[1]:=642;
helpline[0]:=643;
END;
Error;
curi:=nullcharacte;
mem[a].hh.rh:=0;
END
ELSE
BEGIN
IF(curc>=fontbc[curf])AND(curc<=fontec[curf])THEN
curi:=
fontinfo[charbase[curf]+curc].qqqq
ELSE
curi:=nullcharacte;
IF NOT((curi.b0>0))THEN
BEGIN
Charwarning(curf,curc);
mem[a].hh.rh:=0;
END;
END;
END;
{631}{637}
PROCEDURE Makeover(q:halfword);
BEGIN
mem[q+1].hh.lh:=Overbar(Cleanbox(q+1,2*(curstyle DIV 2)+1),3*
fontinfo[8+parambase[eqtb[2898+cursize].hh.rh]].int,fontinfo[8+parambase
[eqtb[2898+cursize].hh.rh]].int);
mem[q+1].hh.rh:=2;
END;
{638}
PROCEDURE Makeunder(q:halfword);
VAR
p,x,y:halfword;
delta:scaled;
BEGIN
x:=Cleanbox(q+1,curstyle);
p:=Newkern(3*fontinfo[8+parambase[eqtb[2898+cursize].hh.rh]].int);
mem[x].hh.rh:=p;
mem[p].hh.rh:=Fractionrule(fontinfo[8+parambase[eqtb[2898+cursize].hh.rh
]].int);
y:=Vpackage(x,0,1,1073741823);
delta:=mem[y+3].int+mem[y+2].int+fontinfo[8+parambase[eqtb[2898+cursize]
.hh.rh]].int;
mem[y+3].int:=mem[x+3].int;
mem[y+2].int:=delta-mem[y+3].int;
mem[q+1].hh.lh:=y;
mem[q+1].hh.rh:=2;
END;
{639}
PROCEDURE Makevcenter(q:halfword);
VAR
v:halfword;
delta:scaled;
BEGIN
v:=mem[q+1].hh.lh;
IF mem[v].hh.b0<>1 THEN
Confusion(344);
delta:=mem[v+3].int+mem[v+2].int;
mem[v+3].int:=fontinfo[22+parambase[eqtb[2897+cursize].hh.rh]].int+Half(
delta);
mem[v+2].int:=mem[v+3].int-delta;
END;
{640}
PROCEDURE Makeradical(q:halfword);
VAR
x,y:halfword;
delta,clr:scaled;
BEGIN
x:=Cleanbox(q+1,2*(curstyle DIV 2)+1);
IF curstyle<2 THEN
clr:=fontinfo[8+parambase[eqtb[2898+cursize].hh.rh]].
int+(fontinfo[5+parambase[eqtb[2897+cursize].hh.rh]].int DIV 4)
ELSE
BEGIN
clr:=fontinfo[8+parambase[eqtb[2898+cursize].hh.rh]].int;
clr:=clr+(clr DIV 4);
END;
y:=Vardelimiter(q+4,cursize,mem[x+3].int+mem[x+2].int+clr+fontinfo[8+
parambase[eqtb[2898+cursize].hh.rh]].int);
IF mem[y+3].int<=0 THEN
mem[y+3].int:=fontinfo[8+parambase[eqtb[2898+
cursize].hh.rh]].int;
delta:=mem[y+2].int-(mem[x+3].int+mem[x+2].int+clr);
IF delta>0 THEN
clr:=clr+Half(delta);
mem[y+4].int:=-(mem[x+3].int+clr);
mem[y].hh.rh:=Overbar(x,clr,mem[y+3].int);
mem[q+1].hh.lh:=Hpack(y,0,1);
mem[q+1].hh.rh:=2;
END;
{641}
PROCEDURE Makemathacce(q:halfword);
LABEL
30;
VAR
p,x,y:halfword;
c:quarterword;
f:internalfont;
i:fourquarters;
delta:scaled;
BEGIN
Fetch(q+4);
IF(curi.b0>0)THEN
BEGIN
i:=curi;
c:=curc;
f:=curf;
x:=Cleanbox(q+1,2*(curstyle DIV 2)+1);
{642}
WHILE true DO
BEGIN
IF(i.b2 MOD 4)<>2 THEN
GOTO 30;
y:=i.b3;
i:=fontinfo[charbase[f]+y].qqqq;
IF fontinfo[widthbase[f]+i.b0].int>mem[x+1].int THEN
GOTO 30;
c:=y;
END;
30:;
delta:=mem[x+3].int-fontinfo[5+parambase[f]].int;
IF delta<0 THEN
delta:=0;
y:=Charbox(f,c);
mem[y+4].int:=Half(mem[x+1].int-mem[y+1].int);
mem[y+1].int:=0;
p:=Newkern(delta-mem[x+3].int);
mem[p].hh.rh:=x;
mem[y].hh.rh:=p;
y:=Vpackage(y,0,1,1073741823);
mem[y+1].int:=mem[x+1].int;
mem[q+1].hh.lh:=y;
mem[q+1].hh.rh:=2;
END;
END;
{643}PROCEDURE Makefraction(q:halfword);
VAR
p,v,x,y,z:halfword;
delta,delta1,delta2,shiftup,shiftdown,clr:scaled;
BEGIN{644}
x:=Cleanbox(q+2,curstyle+2-2*(curstyle DIV 6));
z:=Cleanbox(q+3,2*(curstyle DIV 2)+3-2*(curstyle DIV 6));
IF mem[x+1].int<mem[z+1].int THEN
x:=Rebox(x,mem[z+1].int)
ELSE
z:=Rebox(
z,mem[x+1].int);
IF curstyle<2 THEN
BEGIN
shiftup:=fontinfo[8+parambase[eqtb[2897+cursize
].hh.rh]].int;
shiftdown:=fontinfo[11+parambase[eqtb[2897+cursize].hh.rh]].int;
END
ELSE
BEGIN
shiftdown:=fontinfo[12+parambase[eqtb[2897+cursize].hh.rh
]].int;
IF mem[q+1].int<>0 THEN
shiftup:=fontinfo[9+parambase[eqtb[2897+cursize]
.hh.rh]].int
ELSE
shiftup:=fontinfo[10+parambase[eqtb[2897+cursize].hh.
rh]].int;
END;
IF mem[q+1].int=0 THEN
{645}
BEGIN
IF curstyle<2 THEN
clr:=7*fontinfo[8+
parambase[eqtb[2898+cursize].hh.rh]].int
ELSE
clr:=3*fontinfo[8+
parambase[eqtb[2898+cursize].hh.rh]].int;
delta:=Half(clr-((shiftup-mem[x+2].int)-(mem[z+3].int-shiftdown)));
IF delta>0 THEN
BEGIN
shiftup:=shiftup+delta;
shiftdown:=shiftdown-delta;
END;
END
ELSE
{646}
BEGIN
IF mem[q+1].int=1073741824 THEN
mem[q+1].int:=
fontinfo[8+parambase[eqtb[2898+cursize].hh.rh]].int;
IF curstyle<2 THEN
clr:=3*mem[q+1].int
ELSE
clr:=mem[q+1].int;
delta:=Half(mem[q+1].int);
delta1:=clr-((shiftup-mem[x+2].int)-(fontinfo[22+parambase[eqtb[2897+
cursize].hh.rh]].int+delta));
delta2:=clr-((fontinfo[22+parambase[eqtb[2897+cursize].hh.rh]].int-delta
)-(mem[z+3].int-shiftdown));
IF delta1>0 THEN
shiftup:=shiftup+delta1;
IF delta2>0 THEN
shiftdown:=shiftdown+delta2;
END;
{647}v:=Newnullbox;
mem[v].hh.b0:=1;
mem[v+3].int:=shiftup+mem[x+3].int;
mem[v+2].int:=mem[z+2].int+shiftdown;
mem[v+1].int:=mem[x+1].int;
IF mem[q+1].int=0 THEN
BEGIN
p:=Newkern((shiftup-mem[x+2].int)-(mem[z+3]
.int-shiftdown));
mem[p].hh.rh:=z;
END
ELSE
BEGIN
y:=Fractionrule(mem[q+1].int);
p:=Newkern((fontinfo[22+parambase[eqtb[2897+cursize].hh.rh]].int-delta)-
(mem[z+3].int-shiftdown));
mem[y].hh.rh:=p;
mem[p].hh.rh:=z;
p:=Newkern((shiftup-mem[x+2].int)-(fontinfo[22+parambase[eqtb[2897+
cursize].hh.rh]].int+delta));
mem[p].hh.rh:=y;
END;
mem[x].hh.rh:=p;
mem[v+5].hh.rh:=x;
{648}
IF curstyle<2 THEN
delta:=fontinfo[20+parambase[eqtb[2897+cursize].
hh.rh]].int
ELSE
delta:=fontinfo[21+parambase[eqtb[2897+cursize].hh.rh]]
.int;
x:=Vardelimiter(q+4,cursize,delta);
mem[x].hh.rh:=v;
z:=Vardelimiter(q+5,cursize,delta);
mem[v].hh.rh:=z;
mem[q+1].int:=Hpack(x,0,1);
END;
{649}
FUNCTION Makeop(q:halfword):scaled;
VAR
delta:scaled;
p,v,x,y,z:halfword;
shiftup,shiftdown:scaled;
BEGIN
IF mem[q+1].hh.rh=1 THEN
BEGIN
Fetch(q+1);
IF(curstyle<2)AND((curi.b2 MOD 4)=2)THEN
BEGIN
curc:=curi.b3;
mem[q+1].hh.b1:=curc;
curi:=fontinfo[charbase[curf]+curc].qqqq;
END;
delta:=fontinfo[italicbase[curf]+curi.b2 DIV 4].int;
x:=Cleanbox(q+1,curstyle);
mem[x+1].int:=mem[x+1].int-delta;
mem[x+4].int:=Half(mem[x+3].int-mem[x+2].int)-fontinfo[22+parambase[eqtb
[2897+cursize].hh.rh]].int;
mem[q+1].hh.rh:=2;
mem[q+1].hh.lh:=x;
END
ELSE
delta:=0;
IF curstyle<2 THEN
IF((delta=0)AND(mem[q].hh.b1=0))OR((delta<>0)AND(mem[
q].hh.b1=1))THEN
mem[q].hh.b1:=1
ELSE
mem[q].hh.b1:=0
ELSE
mem[q].hh.b1
:=0;
IF mem[q].hh.b1=1 THEN
{650}
BEGIN
x:=Cleanbox(q+2,2*(curstyle DIV 4)+4+(
curstyle MOD 2));
y:=Cleanbox(q+1,curstyle);
z:=Cleanbox(q+3,2*(curstyle DIV 4)+5);
v:=Newnullbox;
mem[v].hh.b0:=1;
mem[v+1].int:=mem[y+1].int;
IF mem[x+1].int>mem[v+1].int THEN
mem[v+1].int:=mem[x+1].int;
IF mem[z+1].int>mem[v+1].int THEN
mem[v+1].int:=mem[z+1].int;
x:=Rebox(x,mem[v+1].int);
y:=Rebox(y,mem[v+1].int);
z:=Rebox(z,mem[v+1].int);
mem[x+4].int:=Half(delta);
mem[z+4].int:=-mem[x+4].int;
mem[v+3].int:=mem[y+3].int;
mem[v+2].int:=mem[y+2].int;
{651}
IF mem[q+2].hh.rh=0 THEN
BEGIN
Freenode(x,7);
mem[v+5].hh.rh:=y;
END
ELSE
BEGIN
shiftup:=fontinfo[11+parambase[eqtb[2898+cursize].hh.rh]]
.int-mem[x+2].int;
IF shiftup<fontinfo[9+parambase[eqtb[2898+cursize].hh.rh]].int THEN
shiftup:=fontinfo[9+parambase[eqtb[2898+cursize].hh.rh]].int;
p:=Newkern(shiftup);
mem[p].hh.rh:=y;
mem[x].hh.rh:=p;
p:=Newkern(fontinfo[13+parambase[eqtb[2898+cursize].hh.rh]].int);
mem[p].hh.rh:=x;
mem[v+5].hh.rh:=p;
mem[v+3].int:=mem[v+3].int+fontinfo[13+parambase[eqtb[2898+cursize].hh.
rh]].int+mem[x+3].int+mem[x+2].int+shiftup;
END;
IF mem[q+3].hh.rh=0 THEN
Freenode(z,7)
ELSE
BEGIN
shiftdown:=fontinfo[12+
parambase[eqtb[2898+cursize].hh.rh]].int-mem[z+3].int;
IF shiftdown<fontinfo[10+parambase[eqtb[2898+cursize].hh.rh]].int THEN
shiftdown:=fontinfo[10+parambase[eqtb[2898+cursize].hh.rh]].int;
p:=Newkern(shiftdown);
mem[y].hh.rh:=p;
mem[p].hh.rh:=z;
p:=Newkern(fontinfo[13+parambase[eqtb[2898+cursize].hh.rh]].int);
mem[z].hh.rh:=p;
mem[v+2].int:=mem[v+2].int+fontinfo[13+parambase[eqtb[2898+cursize].hh.
rh]].int+mem[z+3].int+mem[z+2].int+shiftdown;
END;
mem[q+1].int:=v;
END
ELSE
IF(delta<>0)AND(mem[q+3].hh.rh=0)THEN
mem[x+1].int:=mem[x+1].
int+delta;
Makeop:=delta;
END;
{652}
PROCEDURE Makeord(q:halfword);
LABEL
20;
VAR
a:integer;
p:halfword;
BEGIN
20:
IF(mem[q+3].hh.rh=0)AND(mem[q+2].hh.rh=0)AND(mem[q+1].hh.rh=1)
THEN
BEGIN
p:=mem[q].hh.rh;
IF p<>0 THEN
IF(mem[p].hh.b0>=15)AND(mem[p].hh.b0<=21)THEN
IF mem[p+1].
hh.rh=1 THEN
IF mem[p+1].hh.b0=mem[q+1].hh.b0 THEN
BEGIN
Fetch(q+1);
IF(curi.b2 MOD 4)=1 THEN
BEGIN
a:=ligkernbase[curf]+curi.b3;
curc:=mem[p+1].hh.b1;
REPEAT
curi:=fontinfo[a].qqqq;
{653}
IF curi.b1=curc THEN
IF curi.b2>=128 THEN
BEGIN
p:=Newkern(fontinfo
[kernbase[curf]+curi.b3].int);
mem[p].hh.rh:=mem[q].hh.rh;
mem[q].hh.rh:=p;
END
ELSE
BEGIN
mem[q].hh.rh:=mem[p].hh.rh;
mem[q+1].hh.b1:=curi.b3;
mem[q+3]:=mem[p+3];
mem[q+2]:=mem[p+2];
Freenode(p,4);
GOTO 20;
END;
a:=a+1;
UNTIL curi.b0>=128;
END;
END;
END;
END;
{656}
PROCEDURE Makescripts(q:halfword;
delta:scaled);
VAR
p,x,y,z:halfword;
shiftup,shiftdown,clr:scaled;
t:smallnumber;
BEGIN
p:=mem[q+1].int;
IF(p>10000)THEN
BEGIN
shiftup:=0;
shiftdown:=0;
END
ELSE
BEGIN
z:=Hpack(p,0,1);
IF curstyle<4 THEN
t:=16
ELSE
t:=32;
shiftup:=mem[z+3].int-fontinfo[18+parambase[eqtb[2897+t].hh.rh]].int;
shiftdown:=mem[z+2].int+fontinfo[19+parambase[eqtb[2897+t].hh.rh]].int;
Freenode(z,7);
END;
IF mem[q+2].hh.rh=0 THEN
{657}
BEGIN
x:=Cleanbox(q+3,2*(curstyle DIV 4)+5)
;
mem[x+1].int:=mem[x+1].int+eqtb[4018].int;
IF shiftdown<fontinfo[16+parambase[eqtb[2897+cursize].hh.rh]].int THEN
shiftdown:=fontinfo[16+parambase[eqtb[2897+cursize].hh.rh]].int;
clr:=mem[x+3].int-((fontinfo[5+parambase[eqtb[2897+cursize].hh.rh]].int
*4)DIV 5);
IF shiftdown<clr THEN
shiftdown:=clr;
mem[x+4].int:=shiftdown;
END
ELSE
BEGIN{658}
BEGIN
x:=Cleanbox(q+2,2*(curstyle DIV 4)+4+(curstyle
MOD 2));
mem[x+1].int:=mem[x+1].int+eqtb[4018].int;
IF Odd(curstyle)THEN
clr:=fontinfo[15+parambase[eqtb[2897+cursize].hh.rh
]].int
ELSE
IF curstyle<2 THEN
clr:=fontinfo[13+parambase[eqtb[2897+
cursize].hh.rh]].int
ELSE
clr:=fontinfo[14+parambase[eqtb[2897+cursize].
hh.rh]].int;
IF shiftup<clr THEN
shiftup:=clr;
clr:=mem[x+2].int+(fontinfo[5+parambase[eqtb[2897+cursize].hh.rh]].int
DIV 4);
IF shiftup<clr THEN
shiftup:=clr;
END;
IF mem[q+3].hh.rh=0 THEN
mem[x+4].int:=-shiftup
ELSE
{659}
BEGIN
y:=
Cleanbox(q+3,2*(curstyle DIV 4)+5);
mem[y+1].int:=mem[y+1].int+eqtb[4018].int;
IF shiftdown<fontinfo[17+parambase[eqtb[2897+cursize].hh.rh]].int THEN
shiftdown:=fontinfo[17+parambase[eqtb[2897+cursize].hh.rh]].int;
clr:=4*fontinfo[8+parambase[eqtb[2898+cursize].hh.rh]].int-((shiftup-mem
[x+2].int)-(mem[y+3].int-shiftdown));
IF clr>0 THEN
BEGIN
shiftdown:=shiftdown+clr;
clr:=(4*fontinfo[5+parambase[eqtb[2897+cursize].hh.rh]].int DIV 5)-(
shiftup-mem[x+2].int);
IF clr>0 THEN
BEGIN
shiftup:=shiftup+clr;
shiftdown:=shiftdown-clr;
END;
END;
mem[x+4].int:=delta;
p:=Newkern((shiftup-mem[x+2].int)-(mem[y+3].int-shiftdown));
mem[x].hh.rh:=p;
mem[p].hh.rh:=y;
x:=Vpackage(x,0,1,1073741823);
mem[x+4].int:=shiftdown;
END;
END;
IF mem[q+1].int=0 THEN
mem[q+1].int:=x
ELSE
BEGIN
p:=mem[q+1].int;
WHILE mem[p].hh.rh<>0 DO p:=mem[p].hh.rh;
mem[p].hh.rh:=x;
END;
END;
{662}
FUNCTION Makeleftrigh(q:halfword;
style:smallnumber;
maxd,maxh:scaled):smallnumber;
VAR
delta,delta1,delta2:scaled;
BEGIN
IF style<4 THEN
cursize:=0
ELSE
cursize:=16*((style-2)DIV 2);
delta2:=maxd+fontinfo[22+parambase[eqtb[2897+cursize].hh.rh]].int;
delta1:=maxh+maxd-delta2;
IF delta2>delta1 THEN
delta1:=delta2;
delta:=(eqtb[3601].int*delta1)DIV 500;
delta2:=delta1+delta1-eqtb[4016].int;
IF delta<delta2 THEN
delta:=delta2;
mem[q+1].int:=Vardelimiter(q+1,cursize,delta);
Makeleftrigh:=mem[q].hh.b0-(10);
END;
PROCEDURE Mlisttohlist;
LABEL
21,82,80,81,83,30;
VAR
mlist:halfword;
penalties:boolean;
style:smallnumber;
savestyle:smallnumber;
q:halfword;
r:halfword;
rtype:smallnumber;
t:smallnumber;
p,v,x,y,z:halfword;
pen:integer;
s:smallnumber;
maxh,maxd:scaled;
delta:scaled;
BEGIN
mlist:=curmlist;
penalties:=mlistpenalti;
style:=curstyle;
q:=mlist;
r:=0;
rtype:=16;
maxh:=0;
maxd:=0;
{610}
BEGIN
IF curstyle<4 THEN
cursize:=0
ELSE
cursize:=16*((curstyle-2)
DIV 2);
curmu:=Xovern(fontinfo[6+parambase[eqtb[2897+cursize].hh.rh]].int,18);
END;
WHILE q<>0 DO{632}
BEGIN{633}
21:
delta:=0;
CASE mem[q].hh.b0 OF
17:CASE rtype OF
17,16,18,19,21,29:BEGIN
mem[q].hh.
b0:=15;
GOTO 21;
END;
OTHERS:
END;
18,20,21,30:BEGIN
IF rtype=17 THEN
mem[r].hh.b0:=15;
IF mem[q].hh.b0=30 THEN
GOTO 80;
END;
{636}29:GOTO 80;
24:BEGIN
Makefraction(q);
GOTO 82;
END;
16:BEGIN
delta:=Makeop(q);
IF mem[q].hh.b1=1 THEN
GOTO 82;
END;
15:Makeord(q);
19,22:;
23:Makeradical(q);
26:Makeover(q);
25:Makeunder(q);
27:Makemathacce(q);
28:Makevcenter(q);
{634}14:BEGIN
curstyle:=mem[q].hh.b1;
{610}
BEGIN
IF curstyle<4 THEN
cursize:=0
ELSE
cursize:=16*((curstyle-2)
DIV 2);
curmu:=Xovern(fontinfo[6+parambase[eqtb[2897+cursize].hh.rh]].int,18);
END;
GOTO 81;
END;
8,12,7:GOTO 81;
2:BEGIN
IF mem[q+3].int>maxh THEN
maxh:=mem[q+3].int;
IF mem[q+2].int>maxd THEN
maxd:=mem[q+2].int;
GOTO 81;
END;
10:BEGIN{635}
IF mem[q].hh.b1=99 THEN
BEGIN
x:=mem[q+1].hh.lh;
y:=Mathglue(x,curmu);
Deletegluere(x);
mem[q+1].hh.lh:=y;
mem[q].hh.b1:=0;
END
ELSE
IF(cursize>0)AND(mem[q].hh.b1=98)THEN
BEGIN
p:=mem[q].hh.rh;
IF p<>0 THEN
IF(mem[p].hh.b0=10)OR(mem[p].hh.b0=11)THEN
BEGIN
mem[q].hh.
rh:=mem[p].hh.rh;
mem[p].hh.rh:=0;
Flushnodelis(p);
END;
END;
GOTO 81;
END;
11:BEGIN
Mathkern(q,curmu);
GOTO 81;
END;
OTHERS:Confusion(644)
END;
{654}
CASE mem[q+1].hh.rh OF
1:{655}BEGIN
Fetch(q+1);
IF(curi.b0>0)THEN
BEGIN
delta:=fontinfo[italicbase[curf]+curi.b2 DIV 4].
int;
p:=Newcharacter(curf,curc);
IF(mem[q+3].hh.rh=0)AND(delta<>0)THEN
BEGIN
mem[p].hh.rh:=Newkern(delta)
;
delta:=0;
END;
END
ELSE
p:=0;
END;
0:p:=0;
2:p:=mem[q+1].hh.lh;
3:BEGIN
curmlist:=mem[q+1].hh.lh;
savestyle:=curstyle;
mlistpenalti:=false;
Mlisttohlist;
curstyle:=savestyle;
{610}
BEGIN
IF curstyle<4 THEN
cursize:=0
ELSE
cursize:=16*((curstyle-2)
DIV 2);
curmu:=Xovern(fontinfo[6+parambase[eqtb[2897+cursize].hh.rh]].int,18);
END;
p:=Hpack(mem[10003].hh.rh,0,1);
END;
OTHERS:Confusion(645)
END;
mem[q+1].int:=p;
IF(mem[q+3].hh.rh=0)AND(mem[q+2].hh.rh=0)THEN
GOTO 82;
Makescripts(q,delta);
82:
z:=Hpack(mem[q+1].int,0,1);
IF mem[z+3].int>maxh THEN
maxh:=mem[z+3].int;
IF mem[z+2].int>maxd THEN
maxd:=mem[z+2].int;
Freenode(z,7);
80:
r:=q;
rtype:=mem[r].hh.b0;
81:
q:=mem[q].hh.rh;
END;
{660}p:=10003;
mem[p].hh.rh:=0;
q:=mlist;
rtype:=0;
curstyle:=style;
{610}
BEGIN
IF curstyle<4 THEN
cursize:=0
ELSE
cursize:=16*((curstyle-2)
DIV 2);
curmu:=Xovern(fontinfo[6+parambase[eqtb[2897+cursize].hh.rh]].int,18);
END;
WHILE q<>0 DO
BEGIN{661}
t:=22;
s:=4;
pen:=10000;
CASE mem[q].hh.b0 OF
15,16,19,20,21:t:=mem[q].hh.b0;
17:BEGIN
t:=17;
pen:=eqtb[3592].int;
END;
18:BEGIN
t:=18;
pen:=eqtb[3593].int;
END;
22,28,26,25:;
23:s:=5;
27:s:=5;
24:s:=6;
29,30:t:=Makeleftrigh(q,style,maxd,maxh);
14:{663}BEGIN
curstyle:=mem[q].hh.b1;
s:=2;
{610}
BEGIN
IF curstyle<4 THEN
cursize:=0
ELSE
cursize:=16*((curstyle-2)
DIV 2);
curmu:=Xovern(fontinfo[6+parambase[eqtb[2897+cursize].hh.rh]].int,18);
END;
GOTO 83;
END;
8,12,2,7,10,11:BEGIN
mem[p].hh.rh:=q;
p:=q;
q:=mem[q].hh.rh;
mem[p].hh.rh:=0;
GOTO 30;
END;
OTHERS:Confusion(646)
END;
{666}
IF rtype>0 THEN
BEGIN
CASE strpool[rtype*8+t+magicoffset]OF
48:x:=0
;
49:IF curstyle<4 THEN
x:=14
ELSE
x:=0;
50:x:=14;
51:IF curstyle<4 THEN
x:=15
ELSE
x:=0;
52:x:=16;
OTHERS:Confusion(648)
END;
IF x<>0 THEN
BEGIN
y:=Mathglue(eqtb[2362+x].hh.rh,curmu);
z:=Newglue(y);
mem[y].hh.rh:=0;
mem[p].hh.rh:=z;
p:=z;
mem[z].hh.b1:=x+1;
END;
END;
{667}
IF mem[q+1].int<>0 THEN
BEGIN
mem[p].hh.rh:=mem[q+1].int;
REPEAT
p:=mem[p].hh.rh;
UNTIL mem[p].hh.rh=0;
END;
IF(pen<10000)AND penalties AND(mem[q].hh.rh<>0)THEN
BEGIN
rtype:=mem[mem
[q].hh.rh].hh.b0;
IF(rtype<>12)AND(rtype<>18)THEN
BEGIN
z:=Newpenalty(pen);
mem[p].hh.rh:=z;
p:=z;
END;
END;
rtype:=t;
83:
r:=q;
q:=mem[q].hh.rh;
Freenode(r,s);
30:
END;
END;
{672}PROCEDURE Pushalignmen;
VAR
p:halfword;
BEGIN
p:=getnode(3);
mem[p].hh.rh:=alignptr;
mem[p].hh.lh:=curalign;
mem[p+1].hh.lh:=mem[10008].hh.rh;
mem[p+1].hh.rh:=curspan;
mem[p+2].int:=alignstate;
alignptr:=p;
END;
PROCEDURE Popalignment;
VAR
p:halfword;
BEGIN
p:=alignptr;
alignstate:=mem[p+2].int;
curspan:=mem[p+1].hh.rh;
mem[10008].hh.rh:=mem[p+1].hh.lh;
curalign:=mem[p].hh.lh;
alignptr:=mem[p].hh.rh;
freenode(p,3);
END;
{674}{681}
PROCEDURE Getpreamblet;
LABEL
21;
BEGIN
21:
gettoken;
IF(curcmd=73)AND(curchr=10)THEN
BEGIN
scanoptional;
scanglue(false);
eqdefine(2372,98,curval);
GOTO 21;
END;
IF(curchr=128)AND(curcmd=4)THEN
BEGIN
printnl(653);
BEGIN
helpptr:=2;
helpline[1]:=654;
helpline[0]:=655;
END;
error;
GOTO 21;
END;
END;
PROCEDURE Alignpeek;
FORWARD;
PROCEDURE Offsave;
FORWARD;
PROCEDURE Initalign;
LABEL
30,31,32,22;
VAR
savecsptr:halfword;
p:halfword;
BEGIN
savecsptr:=csptr;
Pushalignmen;
alignstate:=-1000000;
{676}
IF(curlist.modefield=185)AND((curlist.tailfield<>curlist.headfield)
OR(curlist.auxfield<>0))THEN
BEGIN
printnl(649);
BEGIN
helpptr:=3;
helpline[2]:=650;
helpline[1]:=651;
helpline[0]:=652;
END;
error;
curstyle:=0;
mlistpenalti:=false;
curmlist:=mem[curlist.headfield].hh.rh;
mlisttohlist;
flushnodelis(mem[10003].hh.rh);
curstyle:=0;
curmlist:=curlist.auxfield;
mlisttohlist;
flushnodelis(mem[10003].hh.rh);
END;
pushnest;
{675}
IF curlist.modefield=185 THEN
BEGIN
curlist.modefield:=-1;
curlist.auxfield:=nest[nestptr-2].auxfield;
END
ELSE
IF curlist.modefield>0 THEN
curlist.modefield:=-curlist.
modefield;
scanspec;
newsavelevel(8);
{677}mem[10008].hh.rh:=0;
curalign:=10008;
scannerstatu:=4;
warningindex:=savecsptr;
WHILE true DO
BEGIN{678}
mem[curalign].hh.rh:=newparamglue(10);
curalign:=mem[curalign].hh.rh;
IF curcmd=5 THEN
GOTO 30;
{679}{682}p:=10004;
mem[p].hh.rh:=0;
WHILE true DO
BEGIN
Getpreamblet;
IF curcmd=6 THEN
GOTO 31;
IF(curcmd<=5)AND(curcmd>=4)THEN
BEGIN
printnl(656);
BEGIN
helpptr:=3;
helpline[2]:=657;
helpline[1]:=658;
helpline[0]:=659;
END;
backerror;
GOTO 31;
END;
IF(curcmd<>10)OR(p<>10004)THEN
BEGIN
mem[p].hh.rh:=getavail;
p:=mem[p].hh.rh;
mem[p].hh.lh:=curtok;
END;
END;
31:;
mem[curalign].hh.rh:=newnullbox;
curalign:=mem[curalign].hh.rh;
mem[curalign].hh.lh:=10009;
mem[curalign+1].int:=-1073741824;
mem[curalign+3].int:=mem[10004].hh.rh;
{683}p:=10004;
mem[p].hh.rh:=0;
WHILE true DO
BEGIN
22:
Getpreamblet;
IF(curcmd<=5)AND(curcmd>=4)AND(alignstate=-999999)THEN
GOTO 32;
IF curcmd=6 THEN
BEGIN
printnl(660);
BEGIN
helpptr:=3;
helpline[2]:=657;
helpline[1]:=658;
helpline[0]:=661;
END;
GOTO 22;
END;
mem[p].hh.rh:=getavail;
p:=mem[p].hh.rh;
mem[p].hh.lh:=curtok;
END;
32:
mem[p].hh.rh:=getavail;
p:=mem[p].hh.rh;
mem[p].hh.lh:=2304;
mem[curalign+2].int:=mem[10004].hh.rh;
END;
30:
scannerstatu:=0;
Alignpeek;
END;
{685}{686}
PROCEDURE Initspan(p:halfword);
BEGIN
pushnest;
IF curlist.modefield=-1 THEN
curlist.auxfield:=-65536000
ELSE
curlist.
auxfield:=1000;
curspan:=p;
END;
PROCEDURE Initrow;
BEGIN
pushnest;
curlist.modefield:=(-94)-curlist.modefield;
BEGIN
mem[curlist.tailfield].hh.rh:=newglue(mem[mem[10008].hh.rh+1].hh.
lh);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b1:=11;
curalign:=mem[mem[10008].hh.rh].hh.rh;
Initspan(curalign);
END;
{687}
PROCEDURE Initcol;
BEGIN
mem[curalign+5].hh.lh:=curcmd;
IF curcmd=62 THEN
alignstate:=0
ELSE
BEGIN
backinput;
begintokenli(mem[curalign+3].int,1);
alignstate:=1000000;
END;
END;
{690}
FUNCTION Fincol:boolean;
LABEL
10;
VAR
p:halfword;
q:halfword;
s:halfword;
u:halfword;
w:scaled;
o:glueord;
n:halfword;
BEGIN
IF(curalign=0)OR(mem[curalign].hh.rh=0)THEN
confusion(662);
p:=mem[mem[curalign].hh.rh].hh.rh;
{691}
IF(p=0)AND(mem[curalign+5].hh.lh<>129)THEN
BEGIN
printnl(663);
BEGIN
helpptr:=3;
helpline[2]:=664;
helpline[1]:=665;
helpline[0]:=666;
END;
mem[curalign+5].hh.lh:=129;
error;
END;
IF mem[curalign+5].hh.lh<>128 THEN
BEGIN{694}
BEGIN
IF curlist.modefield=
-93 THEN
BEGIN
u:=hpack(mem[curlist.headfield].hh.rh,0,1);
w:=mem[u+1].int;
END
ELSE
BEGIN
u:=vpackage(mem[curlist.headfield].hh.rh,0,1,0);
w:=mem[u+3].int;
END;
n:=0;
IF curspan<>curalign THEN
{696}
BEGIN
q:=curspan;
REPEAT
n:=n+1;
q:=mem[mem[q].hh.rh].hh.rh;
UNTIL q=curalign;
IF n>255 THEN
confusion(667);
q:=curspan;
WHILE mem[mem[q].hh.lh].hh.rh<n DO q:=mem[q].hh.lh;
IF mem[mem[q].hh.lh].hh.rh>n THEN
BEGIN
s:=getnode(2);
mem[s].hh.lh:=mem[q].hh.lh;
mem[s].hh.rh:=n;
mem[q].hh.lh:=s;
mem[s+1].int:=w;
END
ELSE
IF mem[mem[q].hh.lh+1].int<w THEN
mem[mem[q].hh.lh+1].int:=w;
END
ELSE
IF w>mem[curalign+1].int THEN
mem[curalign+1].int:=w;
mem[u].hh.b0:=13;
mem[u].hh.b1:=n;
{570}
IF totalstretch[3]<>0 THEN
o:=3
ELSE
IF totalstretch[2]<>0 THEN
o:=
2
ELSE
IF totalstretch[1]<>0 THEN
o:=1
ELSE
o:=0;
mem[u+5].hh.b1:=o;
mem[u+6].int:=totalstretch[o];
{576}
IF totalshrink[3]<>0 THEN
o:=3
ELSE
IF totalshrink[2]<>0 THEN
o:=2
ELSE
IF totalshrink[1]<>0 THEN
o:=1
ELSE
o:=0;
mem[u+5].hh.b0:=o;
mem[u+4].int:=totalshrink[o];
popnest;
mem[curlist.tailfield].hh.rh:=u;
curlist.tailfield:=u;
END;
{692}
BEGIN
mem[curlist.tailfield].hh.rh:=newglue(mem[mem[curalign].hh.rh
+1].hh.lh);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b1:=11;
IF mem[curalign+5].hh.lh=129 THEN
{693}
BEGIN
curalign:=p;
WHILE curalign<>0 DO
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=
newnullbox;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=13;
IF mem[curalign+1].int<0 THEN
mem[curalign+1].int:=0;
{692}
BEGIN
mem[curlist.tailfield].hh.rh:=newglue(mem[mem[curalign].hh.rh
+1].hh.lh);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b1:=11;
curalign:=mem[mem[curalign].hh.rh].hh.rh;
END;
Fincol:=true;
GOTO 10;
END;
Initspan(p);
END;
{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
curalign:=p;
Initcol;
Fincol:=false;
10:
END;
{697}
PROCEDURE Finrow;
VAR
p:halfword;
BEGIN
IF curlist.modefield=-93 THEN
BEGIN
p:=hpack(mem[curlist.headfield
].hh.rh,0,1);
popnest;
appendtovlis(p);
END
ELSE
BEGIN
p:=vpackage(mem[curlist.headfield].hh.rh,0,1,1073741823);
popnest;
mem[curlist.tailfield].hh.rh:=p;
curlist.tailfield:=p;
curlist.auxfield:=1000;
END;
mem[p].hh.b0:=13;
mem[p+6].int:=0;
Alignpeek;
END;
{698}PROCEDURE Doassignment;
FORWARD;
PROCEDURE Resumeafterd;
FORWARD;
PROCEDURE Buildpage;
FORWARD;
PROCEDURE Finalign;
VAR
p,q,r,s,u:halfword;
t:scaled;
n:halfword;
BEGIN
IF curgroup<>8 THEN
confusion(668);
unsave;
{699}q:=mem[mem[10008].hh.rh].hh.rh;
REPEAT
flushlist(mem[q+3].int);
flushlist(mem[q+2].int);
p:=mem[mem[q].hh.rh].hh.rh;
IF mem[q+1].int=-1073741824 THEN
mem[q+1].int:=0;
IF(p<>0)AND(mem[q].hh.lh<>10009)THEN
{700}
BEGIN
t:=mem[q+1].int+mem[mem[
mem[q].hh.rh+1].hh.lh+1].int;
r:=mem[q].hh.lh;
s:=10009;
mem[s].hh.lh:=p;
n:=1;
REPEAT
mem[r+1].int:=mem[r+1].int-t;
u:=mem[r].hh.lh;
WHILE mem[r].hh.rh>n DO
BEGIN
s:=mem[s].hh.lh;
n:=mem[mem[s].hh.lh].hh.rh+1;
END;
IF mem[r].hh.rh<n THEN
BEGIN
mem[r].hh.lh:=mem[s].hh.lh;
mem[s].hh.lh:=r;
mem[r].hh.rh:=mem[r].hh.rh-1;
s:=r;
END
ELSE
BEGIN
IF mem[r+1].int>mem[mem[s].hh.lh+1].int THEN
mem[mem[s].
hh.lh+1].int:=mem[r+1].int;
freenode(r,2);
END;
r:=u;
UNTIL r=10009;
END;
mem[q].hh.b0:=13;
mem[q].hh.b1:=0;
mem[q+3].int:=mem[q+1].int;
mem[q+2].int:=0;
mem[q+5].hh.b1:=0;
mem[q+5].hh.b0:=0;
mem[q+6].int:=0;
mem[q+4].int:=0;
q:=p;
UNTIL q=0;
{701}saveptr:=saveptr-2;
IF curlist.modefield=-1 THEN
p:=hpack(mem[10008].hh.rh,savestack[saveptr
+1].int,savestack[saveptr+0].int)
ELSE
p:=vpackage(mem[10008].hh.rh,
savestack[saveptr+1].int,savestack[saveptr+0].int,1073741823);
q:=p+5;
REPEAT
q:=mem[q].hh.rh;
r:=mem[q+1].hh.lh;
mem[q].hh.b0:=11;
mem[q].hh.b1:=0;
IF mem[p+5].hh.b0=0 THEN
mem[q+1].int:=mem[r+1].int
ELSE
IF mem[p+5].hh.
b0=1 THEN
IF mem[r].hh.b0<>mem[p+5].hh.b1 THEN
mem[q+1].int:=mem[r+1].
int
ELSE
mem[q+1].int:=mem[q+1].int+Round(mem[p+6].gr*mem[r+2].int)
ELSE
IF mem[r].hh.b1<>mem[p+5].hh.b1 THEN
mem[q+1].int:=mem[r+1].int
ELSE
mem
[q+1].int:=mem[q+1].int-Round(mem[p+6].gr*mem[r+3].int);
deletegluere(r);
q:=mem[q].hh.rh;
UNTIL q=0;
{702}q:=mem[curlist.headfield].hh.rh;
WHILE q<>0 DO
BEGIN
IF mem[q].hh.b0=13 THEN
{703}
BEGIN
IF curlist.
modefield=-1 THEN
BEGIN
mem[q].hh.b0:=0;
mem[q+1].int:=mem[p+1].int;
END
ELSE
BEGIN
mem[q].hh.b0:=1;
mem[q+3].int:=mem[p+3].int;
END;
mem[q+5].hh.b1:=mem[p+5].hh.b1;
mem[q+5].hh.b0:=mem[p+5].hh.b0;
mem[q+6].gr:=mem[p+6].gr;
r:=mem[mem[q+5].hh.rh].hh.rh;
s:=mem[mem[p+5].hh.rh].hh.rh;
REPEAT{704}
n:=mem[r].hh.b1;
t:=mem[s+1].int;
WHILE n>0 DO
BEGIN
n:=n-1;
s:=mem[s].hh.rh;
t:=t+mem[s+1].int;
s:=mem[s].hh.rh;
t:=t+mem[s+1].int;
END;
IF curlist.modefield=-1 THEN
{705}
BEGIN
mem[r+3].int:=mem[q+3].int;
mem[r+2].int:=mem[q+2].int;
IF t=mem[r+1].int THEN
BEGIN
mem[r+5].hh.b0:=0;
mem[r+5].hh.b1:=0;
mem[r+6].gr:=0.0;
END
ELSE
IF t>mem[r+1].int THEN
BEGIN
mem[r+5].hh.b0:=1;
IF mem[r+6].int=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=(t-mem[r+1].
int)/mem[r+6].int;
END
ELSE
BEGIN
mem[r+5].hh.b1:=mem[r+5].hh.b0;
mem[r+5].hh.b0:=2;
IF mem[r+4].int=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=(mem[r+1].int-
t)/mem[r+4].int;
END;
mem[r+1].int:=t;
mem[r].hh.b0:=0;
END
ELSE
{706}
BEGIN
mem[r+1].int:=mem[q+1].int;
IF t=mem[r+3].int THEN
BEGIN
mem[r+5].hh.b0:=0;
mem[r+5].hh.b1:=0;
mem[r+6].gr:=0.0;
END
ELSE
IF t>mem[r+3].int THEN
BEGIN
mem[r+5].hh.b0:=1;
IF mem[r+6].int=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=(t-mem[r+3].
int)/mem[r+6].int;
END
ELSE
BEGIN
mem[r+5].hh.b1:=mem[r+5].hh.b0;
mem[r+5].hh.b0:=2;
IF mem[r+4].int=0 THEN
mem[r+6].gr:=0.0
ELSE
mem[r+6].gr:=(mem[r+3].int-
t)/mem[r+4].int;
END;
mem[r+3].int:=t;
mem[r].hh.b0:=1;
END;
mem[r+4].int:=0;
IF mem[r].hh.b1>0 THEN
BEGIN
t:=newkern(0);
mem[t].hh.rh:=mem[r].hh.rh;
mem[r].hh.rh:=t;
r:=t;
END;
r:=mem[mem[r].hh.rh].hh.rh;
s:=mem[mem[s].hh.rh].hh.rh;
UNTIL r=0;
END;
q:=mem[q].hh.rh;
END;
flushnodelis(p);
Popalignment;
{707}t:=curlist.auxfield;
p:=mem[curlist.headfield].hh.rh;
q:=curlist.tailfield;
popnest;
IF curlist.modefield=185 THEN
{1091}
BEGIN
Doassignment;
IF curcmd<>3 THEN
{1092}
BEGIN
printnl(891);
BEGIN
helpptr:=2;
helpline[1]:=650;
helpline[0]:=651;
END;
backerror;
END
ELSE
{1081}
BEGIN
getnctoken;
IF curcmd<>3 THEN
BEGIN
printnl(887);
BEGIN
helpptr:=2;
helpline[1]:=888;
helpline[0]:=889;
END;
backerror;
END;
END;
popnest;
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(eqtb[3594].int);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
BEGIN
mem[curlist.tailfield].hh.rh:=newparamglue(3);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.rh:=p;
IF p<>0 THEN
curlist.tailfield:=q;
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(eqtb[3595].int);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
BEGIN
mem[curlist.tailfield].hh.rh:=newparamglue(3);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
curlist.auxfield:=t;
Resumeafterd;
END
ELSE
BEGIN
curlist.auxfield:=t;
mem[curlist.tailfield].hh.rh:=p;
IF p<>0 THEN
curlist.tailfield:=q;
IF curlist.modefield=1 THEN
Buildpage;
END;
END;
{684}
PROCEDURE Alignpeek;
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF curcmd=34 THEN
BEGIN
scanleftbrac;
newsavelevel(9);
END
ELSE
IF curcmd=2 THEN
Finalign
ELSE
BEGIN
Initrow;
Initcol;
END;
END;
{710}{721}
FUNCTION Finiteshrink(p:halfword):halfword;
VAR
q:halfword;
BEGIN
IF noshrinkerro THEN
BEGIN
noshrinkerro:=false;
printnl(669);
BEGIN
helpptr:=5;
helpline[4]:=670;
helpline[3]:=671;
helpline[2]:=672;
helpline[1]:=673;
helpline[0]:=674;
END;
error;
END;
q:=newspec(p);
mem[q].hh.b1:=0;
deletegluere(p);
Finiteshrink:=q;
END;
{724}
PROCEDURE Trybreak(pi:integer;
breaktype:smallnumber);
LABEL
10,30,22,60;
VAR
r:halfword;
prevr:halfword;
oldl:halfword;
nobreakyet:boolean;
{725}prevprevr:halfword;
s:halfword;
q:halfword;
v:halfword;
t:quarterword;
f:internalfont;
l:halfword;
noderstaysac:boolean;
linewidth:scaled;
fitclass:0..3;
b:halfword;
d:integer;
artificialba:boolean;
savelink:halfword;
BEGIN{726}
IF Abs(pi)>=10000 THEN
IF pi>0 THEN
GOTO 10
ELSE
pi:=-10000;
nobreakyet:=true;
prevr:=10006;
oldl:=0;
curactivewid[1]:=activewidth[1];
curactivewid[2]:=activewidth[2];
curactivewid[3]:=activewidth[3];
curactivewid[4]:=activewidth[4];
curactivewid[5]:=activewidth[5];
curactivewid[6]:=activewidth[6];
WHILE true DO
BEGIN
22:
r:=mem[prevr].hh.rh;
{727}
IF mem[r].hh.b0=2 THEN
BEGIN
curactivewid[1]:=curactivewid[1]+mem[r
+1].int;
curactivewid[2]:=curactivewid[2]+mem[r+2].int;
curactivewid[3]:=curactivewid[3]+mem[r+3].int;
curactivewid[4]:=curactivewid[4]+mem[r+4].int;
curactivewid[5]:=curactivewid[5]+mem[r+5].int;
curactivewid[6]:=curactivewid[6]+mem[r+6].int;
prevprevr:=prevr;
prevr:=r;
GOTO 22;
END;
{730}
BEGIN
l:=mem[r+1].hh.lh;
IF l>oldl THEN
BEGIN
IF(minimumdemer<1073741823)AND((oldl<>easyline)OR(r
=10006))THEN
{731}
BEGIN
IF nobreakyet THEN
{732}
BEGIN
nobreakyet:=false;
breakwidth[1]:=background[1];
breakwidth[2]:=background[2];
breakwidth[3]:=background[3];
breakwidth[4]:=background[4];
breakwidth[5]:=background[5];
breakwidth[6]:=background[6];
IF(breaktype=0)OR(curp=0)THEN
BEGIN
s:=curp;
WHILE s<>0 DO
BEGIN
IF(s>10000)THEN
GOTO 30;
CASE mem[s].hh.b0 OF
10:{733}BEGIN
v:=mem[s+1].hh.lh;
breakwidth[1]:=breakwidth[1]-mem[v+1].int;
breakwidth[2+mem[v].hh.b0]:=breakwidth[2+mem[v].hh.b0]-mem[v+2].int;
breakwidth[6]:=breakwidth[6]-mem[v+3].int;
END;
12:;
9,11:breakwidth[1]:=breakwidth[1]-mem[s+1].int;
OTHERS:GOTO 30
END;
s:=mem[s].hh.rh;
END;
END
ELSE
{735}
BEGIN
t:=mem[curp].hh.b1;
s:=curp;
WHILE t>0 DO
BEGIN
t:=t-1;
s:=mem[s].hh.rh;
{736}
IF(s>10000)THEN
BEGIN
f:=mem[s].hh.b0;
breakwidth[1]:=breakwidth[1]-fontinfo[widthbase[f]+fontinfo[charbase[f]+
mem[s].hh.b1].qqqq.b0].int;
END
ELSE
CASE mem[s].hh.b0 OF
6:BEGIN
f:=mem[s+1].hh.b0;
breakwidth[1]:=breakwidth[1]-fontinfo[widthbase[f]+fontinfo[charbase[f]+
mem[s+1].hh.b1].qqqq.b0].int;
END;
11:breakwidth[1]:=breakwidth[1]-mem[s+1].int;
OTHERS:confusion(675)
END;
END;
s:=mem[curp+1].hh.rh;
WHILE s<>0 DO
BEGIN{737}
IF(s>10000)THEN
BEGIN
f:=mem[s].hh.b0;
breakwidth[1]:=breakwidth[1]+fontinfo[widthbase[f]+fontinfo[charbase[f]+
mem[s].hh.b1].qqqq.b0].int;
END
ELSE
CASE mem[s].hh.b0 OF
6:BEGIN
f:=mem[s+1].hh.b0;
breakwidth[1]:=breakwidth[1]+fontinfo[widthbase[f]+fontinfo[charbase[f]+
mem[s+1].hh.b1].qqqq.b0].int;
END;
11:breakwidth[1]:=breakwidth[1]+mem[s+1].int;
OTHERS:confusion(676)
END;
s:=mem[s].hh.rh;
END;
breakwidth[1]:=breakwidth[1]+discwidth;
END;
30:
END;
{738}
IF mem[prevr].hh.b0=2 THEN
BEGIN
mem[prevr+1].int:=mem[prevr+1].int
-curactivewid[1]+breakwidth[1];
mem[prevr+2].int:=mem[prevr+2].int-curactivewid[2]+breakwidth[2];
mem[prevr+3].int:=mem[prevr+3].int-curactivewid[3]+breakwidth[3];
mem[prevr+4].int:=mem[prevr+4].int-curactivewid[4]+breakwidth[4];
mem[prevr+5].int:=mem[prevr+5].int-curactivewid[5]+breakwidth[5];
mem[prevr+6].int:=mem[prevr+6].int-curactivewid[6]+breakwidth[6];
END
ELSE
IF prevr=10006 THEN
BEGIN
activewidth[1]:=breakwidth[1];
activewidth[2]:=breakwidth[2];
activewidth[3]:=breakwidth[3];
activewidth[4]:=breakwidth[4];
activewidth[5]:=breakwidth[5];
activewidth[6]:=breakwidth[6];
END
ELSE
BEGIN
q:=getnode(7);
mem[q].hh.rh:=r;
mem[q].hh.b0:=2;
mem[q].hh.b1:=0;
mem[q+1].int:=breakwidth[1]-curactivewid[1];
mem[q+2].int:=breakwidth[2]-curactivewid[2];
mem[q+3].int:=breakwidth[3]-curactivewid[3];
mem[q+4].int:=breakwidth[4]-curactivewid[4];
mem[q+5].int:=breakwidth[5]-curactivewid[5];
mem[q+6].int:=breakwidth[6]-curactivewid[6];
mem[prevr].hh.rh:=q;
prevprevr:=prevr;
prevr:=q;
END;
minimumdemer:=minimumdemer+Abs(eqtb[3599].int);
FOR fitclass:=0 TO 3 DO
BEGIN
IF minimaldemer[fitclass]<=minimumdemer
THEN
{740}
BEGIN
q:=getnode(2);
mem[q].hh.rh:=passive;
passive:=q;
mem[q+1].int:=curp;
mem[q].hh.lh:=bestplace[fitclass];
q:=getnode(3);
mem[q+1].hh.rh:=passive;
mem[q+1].hh.lh:=bestplline[fitclass]+1;
mem[q].hh.b1:=fitclass;
mem[q].hh.b0:=breaktype;
mem[q+2].int:=minimaldemer[fitclass];
mem[q].hh.rh:=r;
mem[prevr].hh.rh:=q;
prevr:=q;
IF eqtb[3614].int>2 THEN
{741}
BEGIN
printnl(677);
printint(passive);
print(678);
printint(mem[q+1].hh.lh-1);
printchar(46);
printint(fitclass);
IF breaktype=1 THEN
printchar(45);
print(679);
printint(mem[q+2].int);
print(680);
printint(mem[passive].hh.lh);
END;
END;
minimaldemer[fitclass]:=1073741823;
END;
minimumdemer:=1073741823;
{739}
IF r<>10006 THEN
BEGIN
q:=getnode(7);
mem[q].hh.rh:=r;
mem[q].hh.b0:=2;
mem[q].hh.b1:=0;
mem[q+1].int:=curactivewid[1]-breakwidth[1];
mem[q+2].int:=curactivewid[2]-breakwidth[2];
mem[q+3].int:=curactivewid[3]-breakwidth[3];
mem[q+4].int:=curactivewid[4]-breakwidth[4];
mem[q+5].int:=curactivewid[5]-breakwidth[5];
mem[q+6].int:=curactivewid[6]-breakwidth[6];
mem[prevr].hh.rh:=q;
prevprevr:=prevr;
prevr:=q;
END;
END;
IF r=10006 THEN
GOTO 10;
{745}
IF l>easyline THEN
BEGIN
linewidth:=secondwidth;
oldl:=65534;
END
ELSE
BEGIN
oldl:=l;
IF l>lastspeciall THEN
linewidth:=secondwidth
ELSE
IF eqtb[2635].hh.rh=0
THEN
linewidth:=firstwidth
ELSE
linewidth:=mem[eqtb[2635].hh.rh+2*l].int
;
END;
END;
END;
{746}
BEGIN
artificialba:=false;
IF curactivewid[1]<linewidth THEN
{747}
IF(curactivewid[3]<>0)OR(
curactivewid[4]<>0)OR(curactivewid[5]<>0)THEN
BEGIN
b:=0;
fitclass:=1;
END
ELSE
BEGIN
b:=badness(linewidth-curactivewid[1],curactivewid[2]);
IF b>12 THEN
IF b>99 THEN
fitclass:=3
ELSE
fitclass:=2
ELSE
fitclass:=1;
END
ELSE
{748}
BEGIN
IF curactivewid[1]-linewidth>curactivewid[6]THEN
b:=
10001
ELSE
b:=badness(curactivewid[1]-linewidth,curactivewid[6]);
IF b>12 THEN
fitclass:=0
ELSE
fitclass:=1;
END;
IF(b>10000)OR(pi=-10000)THEN
{749}
BEGIN
IF secondpass AND(minimumdemer=
1073741823)AND(mem[r].hh.rh=10006)AND(prevr=10006)THEN
BEGIN
b:=0;
artificialba:=true;
END
ELSE
IF b>threshold THEN
GOTO 60;
noderstaysac:=false;
END
ELSE
BEGIN
prevr:=r;
IF b>threshold THEN
GOTO 22;
noderstaysac:=true;
END;
{750}{753}
IF pi>=0 THEN
BEGIN
d:=(eqtb[3586].int+b+pi);
d:=d*d;
END
ELSE
BEGIN
d:=eqtb[3586].int+b;
d:=d*d;
IF pi>-10000 THEN
d:=d-pi*pi;
END;
IF(breaktype=1)AND(mem[r].hh.b0=1)THEN
IF curp<>0 THEN
d:=d+eqtb[3597].
int
ELSE
d:=d+eqtb[3598].int;
IF Abs(fitclass-mem[r].hh.b1)>1 THEN
d:=d+eqtb[3599].int;
IF eqtb[3614].int>2 THEN
{751}
BEGIN
IF printhead<>curp THEN
{752}
BEGIN
savelink:=mem[curp].hh.rh;
mem[curp].hh.rh:=0;
printnl(226);
shortdisplay(mem[printhead].hh.rh);
mem[curp].hh.rh:=savelink;
printhead:=curp;
END;
printnl(64);
IF curp=0 THEN
printesc(397)
ELSE
IF mem[curp].hh.b0<>10 THEN
BEGIN
IF
mem[curp].hh.b0=12 THEN
printesc(324)
ELSE
IF mem[curp].hh.b0=7 THEN
printesc(213)
ELSE
IF mem[curp].hh.b0=11 THEN
printesc(205)
ELSE
printesc(
207);
END;
print(681);
printint(mem[r+1].hh.rh);
print(682);
IF artificialba THEN
printchar(42)
ELSE
printint(b);
print(683);
printint(pi);
print(684);
printint(d);
END;
d:=d+mem[r+2].int;
IF d<=minimaldemer[fitclass]THEN
BEGIN
minimaldemer[fitclass]:=d;
bestplace[fitclass]:=mem[r+1].hh.rh;
bestplline[fitclass]:=l;
IF d<minimumdemer THEN
minimumdemer:=d;
END;
IF noderstaysac THEN
GOTO 22;
60:{754}
mem[prevr].hh.rh:=mem[r].hh.rh;
freenode(r,3);
IF prevr=10006 THEN
{755}
BEGIN
r:=mem[10006].hh.rh;
IF mem[r].hh.b0=2 THEN
BEGIN
activewidth[1]:=activewidth[1]+mem[r+1].int
;
activewidth[2]:=activewidth[2]+mem[r+2].int;
activewidth[3]:=activewidth[3]+mem[r+3].int;
activewidth[4]:=activewidth[4]+mem[r+4].int;
activewidth[5]:=activewidth[5]+mem[r+5].int;
activewidth[6]:=activewidth[6]+mem[r+6].int;
curactivewid[1]:=activewidth[1];
curactivewid[2]:=activewidth[2];
curactivewid[3]:=activewidth[3];
curactivewid[4]:=activewidth[4];
curactivewid[5]:=activewidth[5];
curactivewid[6]:=activewidth[6];
mem[10006].hh.rh:=mem[r].hh.rh;
freenode(r,7);
END;
END
ELSE
IF mem[prevr].hh.b0=2 THEN
BEGIN
r:=mem[prevr].hh.rh;
IF r=10006 THEN
BEGIN
curactivewid[1]:=curactivewid[1]-mem[prevr+1].int;
curactivewid[2]:=curactivewid[2]-mem[prevr+2].int;
curactivewid[3]:=curactivewid[3]-mem[prevr+3].int;
curactivewid[4]:=curactivewid[4]-mem[prevr+4].int;
curactivewid[5]:=curactivewid[5]-mem[prevr+5].int;
curactivewid[6]:=curactivewid[6]-mem[prevr+6].int;
mem[prevprevr].hh.rh:=10006;
freenode(prevr,7);
prevr:=prevprevr;
END
ELSE
IF mem[r].hh.b0=2 THEN
BEGIN
curactivewid[1]:=curactivewid[1]+
mem[r+1].int;
curactivewid[2]:=curactivewid[2]+mem[r+2].int;
curactivewid[3]:=curactivewid[3]+mem[r+3].int;
curactivewid[4]:=curactivewid[4]+mem[r+4].int;
curactivewid[5]:=curactivewid[5]+mem[r+5].int;
curactivewid[6]:=curactivewid[6]+mem[r+6].int;
mem[prevr+1].int:=mem[prevr+1].int+mem[r+1].int;
mem[prevr+2].int:=mem[prevr+2].int+mem[r+2].int;
mem[prevr+3].int:=mem[prevr+3].int+mem[r+3].int;
mem[prevr+4].int:=mem[prevr+4].int+mem[r+4].int;
mem[prevr+5].int:=mem[prevr+5].int+mem[r+5].int;
mem[prevr+6].int:=mem[prevr+6].int+mem[r+6].int;
mem[prevr].hh.rh:=mem[r].hh.rh;
freenode(r,7);
END;
END;
END;
END;
10:
END;
{771}PROCEDURE Postlinebrea(finalwidowpe:integer);
LABEL
30,31;
VAR
q,r,s:halfword;
discbreak:boolean;
curwidth:scaled;
curindent:scaled;
t:quarterword;
pen:integer;
curline:halfword;
BEGIN{772}
q:=mem[bestbet+1].hh.rh;
curp:=0;
REPEAT
r:=q;
q:=mem[q].hh.lh;
mem[r].hh.lh:=curp;
curp:=r;
UNTIL q=0;
curline:=curlist.alreadyfield+1;
REPEAT{774}{775}
q:=mem[curp+1].int;
discbreak:=false;
IF q<>0 THEN
IF mem[q].hh.b0=10 THEN
BEGIN
deletegluere(mem[q+1].hh.lh);
mem[q+1].hh.lh:=eqtb[2369].hh.rh;
mem[q].hh.b1:=8;
mem[eqtb[2369].hh.rh].hh.rh:=mem[eqtb[2369].hh.rh].hh.rh+1;
GOTO 30;
END
ELSE
BEGIN
IF mem[q].hh.b0=7 THEN
{776}
BEGIN
t:=mem[q].hh.b1;
{777}
IF t=0 THEN
r:=mem[q].hh.rh
ELSE
BEGIN
r:=q;
WHILE t>1 DO
BEGIN
r:=mem[r].hh.rh;
t:=t-1;
END;
s:=mem[r].hh.rh;
IF NOT(s>10000)THEN
IF mem[curp].hh.lh<>0 THEN
IF mem[mem[curp].hh.lh+1]
.int=s THEN
s:=r;
r:=mem[s].hh.rh;
mem[s].hh.rh:=0;
flushnodelis(mem[q].hh.rh);
mem[q].hh.b1:=0;
END;
IF mem[q+1].hh.rh<>0 THEN
{778}
BEGIN
s:=mem[q+1].hh.rh;
WHILE mem[s].hh.rh<>0 DO s:=mem[s].hh.rh;
mem[s].hh.rh:=r;
r:=mem[q+1].hh.rh;
mem[q+1].hh.rh:=0;
END;
IF mem[q+1].hh.lh<>0 THEN
{779}
BEGIN
s:=mem[q+1].hh.lh;
mem[q].hh.rh:=s;
WHILE mem[s].hh.rh<>0 DO s:=mem[s].hh.rh;
mem[q+1].hh.lh:=0;
q:=s;
END;
mem[q].hh.rh:=r;
discbreak:=true;
END;
IF(mem[q].hh.b0=9)OR(mem[q].hh.b0=11)THEN
mem[q+1].int:=0;
END
ELSE
BEGIN
q:=10003;
WHILE mem[q].hh.rh<>0 DO q:=mem[q].hh.rh;
END;
{780}r:=newparamglue(7);
mem[r].hh.rh:=mem[q].hh.rh;
mem[q].hh.rh:=r;
q:=r;
30:;
{781}r:=mem[q].hh.rh;
mem[q].hh.rh:=0;
q:=mem[10003].hh.rh;
mem[10003].hh.rh:=r;
IF eqtb[2368].hh.rh<>0 THEN
BEGIN
r:=newparamglue(6);
mem[r].hh.rh:=q;
q:=r;
END;
{782}
IF curline>lastspeciall THEN
BEGIN
curwidth:=secondwidth;
curindent:=secondindent;
END
ELSE
IF eqtb[2635].hh.rh=0 THEN
BEGIN
curwidth:=firstwidth;
curindent:=firstindent;
END
ELSE
BEGIN
curwidth:=mem[eqtb[2635].hh.rh+2*curline].int;
curindent:=mem[eqtb[2635].hh.rh+2*curline-1].int;
END;
justbox:=hpack(q,curwidth,0);
mem[justbox+4].int:=curindent;
{783}appendtovlis(justbox);
IF mem[10005].hh.rh<>0 THEN
BEGIN
mem[curlist.tailfield].hh.rh:=mem[
10005].hh.rh;
REPEAT
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
UNTIL mem[curlist.tailfield].hh.rh=0;
END;
{784}
IF curline+1=bestline THEN
pen:=0
ELSE
pen:=eqtb[3596].int;
IF(curline=curlist.alreadyfield+1)AND(bestline<>curlist.alreadyfield+2)
THEN
pen:=pen+eqtb[3589].int;
IF curline+2=bestline THEN
pen:=pen+finalwidowpe;
IF discbreak THEN
pen:=pen+eqtb[3591].int;
IF pen<>0 THEN
BEGIN
r:=newpenalty(pen);
mem[curlist.tailfield].hh.rh:=r;
curlist.tailfield:=r;
END;
curline:=curline+1;
curp:=mem[curp].hh.lh;
IF curp<>0 THEN
{773}
BEGIN
r:=10003;
WHILE true DO
BEGIN
q:=mem[r].hh.rh;
IF q=mem[curp+1].int THEN
GOTO 31;
IF(q>10000)THEN
GOTO 31;
IF(mem[q].hh.b0<9)THEN
GOTO 31;
r:=q;
END;
31:
IF r<>10003 THEN
BEGIN
mem[r].hh.rh:=0;
flushnodelis(mem[10003].hh.rh);
mem[10003].hh.rh:=q;
END;
END;
UNTIL curp=0;
IF(curline<>bestline)OR(mem[10003].hh.rh<>0)THEN
confusion(689);
curlist.alreadyfield:=bestline-1;
END;
{789}{800}
FUNCTION Reconstitute(j,n:smallnumber):smallnumber;
LABEL
22,30;
VAR
p:halfword;
s:halfword;
q:fourquarters;
c:quarterword;
d:quarterword;
w:scaled;
r:0..fontmemsize;
BEGIN{801}
hyphenpassed:=0;
s:=10004;
w:=0;
d:=hu[j];
c:=d;
WHILE true DO
BEGIN
22:
p:=getavail;
mem[p].hh.b0:=hf;
mem[p].hh.b1:=c;
mem[s].hh.rh:=p;
{802}
IF j=n THEN
GOTO 30;
q:=fontinfo[charbase[hf]+d].qqqq;
IF(q.b2 MOD 4)<>1 THEN
GOTO 30;
r:=ligkernbase[hf]+q.b3;
c:=hu[j+1];
WHILE true DO
BEGIN
q:=fontinfo[r].qqqq;
IF q.b1=c THEN
BEGIN
IF Odd(hyf[j])AND(hyphenpassed=0)THEN
hyphenpassed
:=j;
IF q.b2<128 THEN
{803}
BEGIN
d:=q.b3;
j:=j+1;
s:=p;
GOTO 22;
END
ELSE
BEGIN
w:=fontinfo[kernbase[hf]+q.b3].int;
GOTO 30;
END;
END
ELSE
IF q.b0<128 THEN
r:=r+1
ELSE
GOTO 30;
END;
END;
30:;
{804}
IF s<>10004 THEN
BEGIN
p:=newligature(hf,d,mem[10004].hh.rh);
mem[10004].hh.rh:=p;
END;
{805}
IF w<>0 THEN
mem[mem[10004].hh.rh].hh.rh:=newkern(w);
Reconstitute:=j;
END;
PROCEDURE Hyphenate;
LABEL
30,40,45,41,10;
VAR
{795}i,j,l:smallnumber;
q,r,s:halfword;
{806}majortail,minortail:halfword;
{816}z:triepointer;
v:quarterword;
{823}h:hyphpointer;
k:strnumber;
u:poolpointer;
BEGIN{817}
FOR j:=0 TO hn DO hyf[j]:=0;
{824}h:=hc[1];
FOR j:=2 TO hn DO h:=(h+h+hc[j])MOD 307;
WHILE true DO
BEGIN{825}
k:=hyphword[h];
IF k=0 THEN
GOTO 45;
IF(strstart[k+1]-strstart[k])<hn THEN
GOTO 45;
IF(strstart[k+1]-strstart[k])=hn THEN
BEGIN
j:=1;
u:=strstart[k];
REPEAT
IF strpool[u]<hc[j]THEN
GOTO 45;
IF strpool[u]>hc[j]THEN
GOTO 30;
j:=j+1;
u:=u+1;
UNTIL j>hn;
{826}s:=hyphlist[h];
WHILE s<>0 DO
BEGIN
hyf[mem[s].hh.lh]:=1;
s:=mem[s].hh.rh;
END;
GOTO 40;
END;
30:;
IF h>0 THEN
h:=h-1
ELSE
h:=307;
END;
45:;
hc[0]:=127;
hc[hn+1]:=127;
hc[hn+2]:=256;
FOR j:=0 TO hn-2 DO
BEGIN
z:=hc[j];
l:=j;
WHILE hc[l]=trie[z].b1 DO
BEGIN
IF trie[z].b0<>0 THEN
{818}
BEGIN
v:=trie[
z].b0;
REPEAT
i:=l-hyfdistance[v];
IF hyfnum[v]>hyf[i]THEN
hyf[i]:=hyfnum[v];
v:=hyfnext[v];
UNTIL v=0;
END;
l:=l+1;
z:=trie[z].rh+hc[l];
END;
END;
40:
hyf[1]:=0;
hyf[hn-2]:=0;
hyf[hn-1]:=0;
hyf[hn]:=0;
{796}
FOR j:=2 TO hn-3 DO
IF Odd(hyf[j])THEN
GOTO 41;
GOTO 10;
41:;
{797}q:=mem[hb].hh.rh;
mem[hb].hh.rh:=0;
s:=curp;
WHILE mem[s].hh.rh<>ha DO s:=mem[s].hh.rh;
mem[s].hh.rh:=0;
flushnodelis(ha);
{807}j:=0;
REPEAT
l:=j;
j:=Reconstitute(j+1,hn);
IF hyphenpassed<>0 THEN
{808}
BEGIN
r:=getnode(2);
mem[s].hh.rh:=r;
mem[r].hh.rh:=mem[10004].hh.rh;
mem[r].hh.b0:=7;
majortail:=mem[10004].hh.rh;
IF mem[majortail].hh.rh<>0 THEN
majortail:=mem[majortail].hh.rh;
i:=hyphenpassed;
{809}minortail:=0;
c:=hu[i+1];
hu[i+1]:=45;
REPEAT
l:=Reconstitute(l+1,i+1);
IF minortail=0 THEN
mem[r+1].hh.lh:=mem[10004].hh.rh
ELSE
mem[minortail]
.hh.rh:=mem[10004].hh.rh;
minortail:=mem[10004].hh.rh;
IF mem[minortail].hh.rh<>0 THEN
minortail:=mem[minortail].hh.rh;
UNTIL l>i;
hu[i+1]:=c;
l:=l-1;
hyf[l]:=0;
{810}minortail:=0;
mem[r+1].hh.rh:=0;
WHILE l<j DO
BEGIN
REPEAT
l:=Reconstitute(l+1,hn);
IF minortail=0 THEN
mem[r+1].hh.rh:=mem[10004].hh.rh
ELSE
mem[minortail]
.hh.rh:=mem[10004].hh.rh;
minortail:=mem[10004].hh.rh;
IF mem[minortail].hh.rh<>0 THEN
BEGIN
hyf[l]:=0;
minortail:=mem[minortail].hh.rh;
END;
UNTIL l>=j;
WHILE l>j DO
BEGIN
j:=Reconstitute(j+1,hn);
mem[majortail].hh.rh:=mem[10004].hh.rh;
majortail:=mem[10004].hh.rh;
IF mem[majortail].hh.rh<>0 THEN
BEGIN
hyf[j]:=0;
majortail:=mem[majortail].hh.rh;
END;
END;
END;
{811}i:=0;
s:=r;
WHILE mem[s].hh.rh<>0 DO
BEGIN
i:=i+1;
s:=mem[s].hh.rh;
END;
mem[r].hh.b1:=i;
END
ELSE
BEGIN
mem[s].hh.rh:=mem[10004].hh.rh;
s:=mem[s].hh.rh;
IF mem[s].hh.rh<>0 THEN
s:=mem[s].hh.rh;
END;
IF Odd(hyf[j])THEN
{812}
BEGIN
r:=newdisc;
mem[r+1].hh.lh:=newcharacter(hf,45);
mem[s].hh.rh:=r;
s:=r;
END;
UNTIL j=hn;
mem[s].hh.rh:=q;
10:
END;
PROCEDURE Linebreak(finalwidowpe:integer);
LABEL
30,31,32,33,34;
VAR
{756}autobreaking:boolean;
prevp:halfword;
q,r,s:halfword;
f:internalfont;
{787}i,j,l:smallnumber;
c:0..255;
BEGIN
parbeginline:=curlist.mlfield;
{711}mem[10003].hh.rh:=mem[curlist.headfield].hh.rh;
IF(curlist.tailfield>10000)THEN
BEGIN
mem[curlist.tailfield].hh.rh:=
newpenalty(10000);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END
ELSE
IF(mem[curlist.tailfield].hh.b0<>10)OR(mem[curlist.tailfield].
hh.b1>=100)THEN
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(10000);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END
ELSE
BEGIN
mem[curlist.tailfield].hh.b0:=12;
deletegluere(mem[curlist.tailfield+1].hh.lh);
mem[curlist.tailfield+1].int:=10000;
END;
mem[curlist.tailfield].hh.rh:=newparamglue(13);
popnest;
{722}noshrinkerro:=true;
IF(mem[eqtb[2368].hh.rh].hh.b1<>0)AND(mem[eqtb[2368].hh.rh+3].int<>0)
THEN
BEGIN
eqtb[2368].hh.rh:=Finiteshrink(eqtb[2368].hh.rh);
END;
IF(mem[eqtb[2369].hh.rh].hh.b1<>0)AND(mem[eqtb[2369].hh.rh+3].int<>0)
THEN
BEGIN
eqtb[2369].hh.rh:=Finiteshrink(eqtb[2369].hh.rh);
END;
q:=eqtb[2368].hh.rh;
r:=eqtb[2369].hh.rh;
background[1]:=mem[q+1].int+mem[r+1].int;
background[2]:=0;
background[3]:=0;
background[4]:=0;
background[5]:=0;
background[2+mem[q].hh.b0]:=mem[q+2].int;
background[2+mem[r].hh.b0]:=background[2+mem[r].hh.b0]+mem[r+2].int;
background[6]:=mem[q+3].int+mem[r+3].int;
{729}minimumdemer:=1073741823;
minimaldemer[0]:=1073741823;
minimaldemer[1]:=1073741823;
minimaldemer[2]:=1073741823;
minimaldemer[3]:=1073741823;
{743}
IF eqtb[2635].hh.rh=0 THEN
IF eqtb[4023].int=0 THEN
BEGIN
lastspeciall:=0;
firstwidth:=eqtb[4010].int;
secondwidth:=firstwidth;
END
ELSE
{744}
BEGIN
lastspeciall:=Abs(eqtb[3621].int);
IF eqtb[3621].int<0 THEN
BEGIN
firstwidth:=eqtb[4010].int-Abs(eqtb[4023]
.int);
IF eqtb[4023].int>=0 THEN
firstindent:=eqtb[4023].int
ELSE
firstindent:=
0;
secondwidth:=eqtb[4010].int;
secondindent:=0;
END
ELSE
BEGIN
firstwidth:=eqtb[4010].int;
firstindent:=0;
secondwidth:=eqtb[4010].int-Abs(eqtb[4023].int);
IF eqtb[4023].int>=0 THEN
secondindent:=eqtb[4023].int
ELSE
secondindent
:=0;
END;
END
ELSE
BEGIN
lastspeciall:=mem[eqtb[2635].hh.rh].hh.lh-1;
secondwidth:=mem[eqtb[2635].hh.rh+2*(lastspeciall+1)].int;
secondindent:=mem[eqtb[2635].hh.rh+2*lastspeciall+1].int;
END;
IF eqtb[3602].int=0 THEN
easyline:=lastspeciall
ELSE
easyline:=65535;
{757}
IF eqtb[3614].int>2 THEN
BEGIN
begindiagnos;
printnl(685);
END;
threshold:=eqtb[3584].int;
secondpass:=false;
WHILE true DO
BEGIN{758}
q:=getnode(3);
mem[q].hh.b0:=0;
mem[q].hh.b1:=1;
mem[q].hh.rh:=10006;
mem[q+1].hh.rh:=0;
mem[q+1].hh.lh:=curlist.alreadyfield+1;
mem[q+2].int:=0;
mem[10006].hh.rh:=q;
activewidth[1]:=background[1];
activewidth[2]:=background[2];
activewidth[3]:=background[3];
activewidth[4]:=background[4];
activewidth[5]:=background[5];
activewidth[6]:=background[6];
passive:=0;
printhead:=10003;
fontinshortd:=0;
curp:=mem[10003].hh.rh;
autobreaking:=true;
prevp:=curp;
WHILE(curp<>0)AND(mem[10006].hh.rh<>10006)DO{760}
BEGIN
IF(curp>10000)
THEN
{761}
BEGIN
prevp:=curp;
REPEAT
f:=mem[curp].hh.b0;
activewidth[1]:=activewidth[1]+fontinfo[widthbase[f]+fontinfo[charbase[f
]+mem[curp].hh.b1].qqqq.b0].int;
curp:=mem[curp].hh.rh;
UNTIL NOT(curp>10000);
END;
CASE mem[curp].hh.b0 OF
0,1,2:activewidth[1]:=activewidth[1]+mem[curp+1]
.int;
8:{1240};
10:BEGIN{762}
IF autobreaking THEN
BEGIN
IF(prevp>10000)THEN
Trybreak(0,0
)
ELSE
IF(mem[prevp].hh.b0<=9)THEN
Trybreak(0,0);
END;
{763}
BEGIN
IF(mem[mem[curp+1].hh.lh].hh.b1<>0)AND(mem[mem[curp+1].hh.lh
+3].int<>0)THEN
BEGIN
mem[curp+1].hh.lh:=Finiteshrink(mem[curp+1].hh.lh)
;
END;
q:=mem[curp+1].hh.lh;
activewidth[1]:=activewidth[1]+mem[q+1].int;
activewidth[2+mem[q].hh.b0]:=activewidth[2+mem[q].hh.b0]+mem[q+2].int;
activewidth[6]:=activewidth[6]+mem[q+3].int;
END;
IF secondpass AND autobreaking THEN
{788}
BEGIN
s:=mem[curp].hh.rh;
IF s<>0 THEN
BEGIN{790}
WHILE true DO
BEGIN
IF(s>10000)THEN
BEGIN
c:=mem[
s].hh.b1;
hf:=mem[s].hh.b0;
END
ELSE
IF mem[s].hh.b0=6 THEN
BEGIN
q:=mem[s+1].hh.rh;
c:=mem[q].hh.b1;
hf:=mem[q].hh.b0;
END
ELSE
IF mem[s].hh.b0<>11 THEN
GOTO 31
ELSE
c:=128;
IF c<128 THEN
IF eqtb[3200+c].hh.rh<>0 THEN
IF(eqtb[3200+c].hh.rh=c)OR(
eqtb[3618].int<>0)THEN
GOTO 32
ELSE
GOTO 31;
s:=mem[s].hh.rh;
END;
32:
ha:=s;
{791}hn:=0;
WHILE true DO
BEGIN
IF(s>10000)THEN
BEGIN
IF mem[s].hh.b0<>hf THEN
GOTO
33;
c:=mem[s].hh.b1;
IF c>=128 THEN
GOTO 33;
IF(eqtb[3200+c].hh.rh=0)OR(hn=63)THEN
GOTO 33;
hb:=s;
hn:=hn+1;
hu[hn]:=c;
hc[hn]:=eqtb[3200+c].hh.rh;
END
ELSE
IF mem[s].hh.b0=6 THEN
{792}
BEGIN
j:=hn;
q:=mem[s+1].hh.rh;
IF mem[q].hh.b0<>hf THEN
GOTO 33;
REPEAT
c:=mem[q].hh.b1;
IF c>=128 THEN
GOTO 33;
IF(eqtb[3200+c].hh.rh=0)OR(j=63)THEN
GOTO 33;
j:=j+1;
hu[j]:=c;
hc[j]:=eqtb[3200+c].hh.rh;
q:=mem[q].hh.rh;
UNTIL q=0;
hb:=s;
hn:=j;
END
ELSE
IF mem[s].hh.b0<>11 THEN
GOTO 33;
s:=mem[s].hh.rh;
END;
33:;
{793}
IF hn<5 THEN
GOTO 31;
WHILE true DO
BEGIN
IF NOT((s>10000))THEN
CASE mem[s].hh.b0 OF
6,11:;
10,12,3,5,4:GOTO 34;
OTHERS:GOTO 31
END;
s:=mem[s].hh.rh;
END;
34:;
Hyphenate;
END;
31:
END;
END;
11:BEGIN
IF NOT(mem[curp].hh.rh>10000)AND autobreaking THEN
IF mem[mem[
curp].hh.rh].hh.b0=10 THEN
Trybreak(0,0);
activewidth[1]:=activewidth[1]+mem[curp+1].int;
END;
6:BEGIN
f:=mem[curp+1].hh.b0;
activewidth[1]:=activewidth[1]+fontinfo[widthbase[f]+fontinfo[charbase[f
]+mem[curp+1].hh.b1].qqqq.b0].int;
END;
7:{764}BEGIN
s:=mem[curp+1].hh.lh;
IF s=0 THEN
Trybreak(eqtb[3588].int,1)
ELSE
BEGIN
discwidth:=0;
REPEAT{765}
IF(s>10000)THEN
BEGIN
f:=mem[s].hh.b0;
discwidth:=discwidth+fontinfo[widthbase[f]+fontinfo[charbase[f]+mem[s].
hh.b1].qqqq.b0].int;
END
ELSE
CASE mem[s].hh.b0 OF
6:BEGIN
f:=mem[s+1].hh.b0;
discwidth:=discwidth+fontinfo[widthbase[f]+fontinfo[charbase[f]+mem[s+1]
.hh.b1].qqqq.b0].int;
END;
11:discwidth:=discwidth+mem[s+1].int;
OTHERS:confusion(688)
END;
s:=mem[s].hh.rh;
UNTIL s=0;
activewidth[1]:=activewidth[1]+discwidth;
Trybreak(eqtb[3587].int,1);
activewidth[1]:=activewidth[1]-discwidth;
END;
END;
9:BEGIN
autobreaking:=(mem[curp].hh.b1=1);
BEGIN
IF NOT(mem[curp].hh.rh>10000)AND autobreaking THEN
IF mem[mem[curp
].hh.rh].hh.b0=10 THEN
Trybreak(0,0);
activewidth[1]:=activewidth[1]+mem[curp+1].int;
END;
END;
12:Trybreak(mem[curp+1].int,0);
4,3,5:;
OTHERS:confusion(687)
END;
prevp:=curp;
curp:=mem[curp].hh.rh;
END;
IF curp=0 THEN
{767}
BEGIN
Trybreak(-10000,1);
IF mem[10006].hh.rh<>10006 THEN
BEGIN{768}
r:=mem[10006].hh.rh;
fewestdemeri:=1073741823;
REPEAT
IF mem[r].hh.b0<>2 THEN
IF mem[r+2].int<fewestdemeri THEN
BEGIN
fewestdemeri:=mem[r+2].int;
bestbet:=r;
END;
r:=mem[r].hh.rh;
UNTIL r=10006;
bestline:=mem[bestbet+1].hh.lh;
IF eqtb[3602].int=0 THEN
GOTO 30;
{769}
BEGIN
r:=mem[10006].hh.rh;
actualloosen:=0;
REPEAT
IF mem[r].hh.b0<>2 THEN
BEGIN
linediff:=mem[r+1].hh.lh-bestline;
IF((linediff<actualloosen)AND(eqtb[3602].int<=linediff))OR((linediff>
actualloosen)AND(eqtb[3602].int>=linediff))THEN
BEGIN
bestbet:=r;
actualloosen:=linediff;
fewestdemeri:=mem[r+2].int;
END
ELSE
IF(linediff=actualloosen)AND(mem[r+2].int<fewestdemeri)THEN
BEGIN
bestbet:=r;
fewestdemeri:=mem[r+2].int;
END;
END;
r:=mem[r].hh.rh;
UNTIL r=10006;
bestline:=mem[bestbet+1].hh.lh;
END;
IF(actualloosen=eqtb[3602].int)OR secondpass THEN
GOTO 30;
END;
END;
{759}q:=mem[10006].hh.rh;
WHILE q<>10006 DO
BEGIN
curp:=mem[q].hh.rh;
IF mem[q].hh.b0=2 THEN
freenode(q,7)
ELSE
freenode(q,3);
q:=curp;
END;
q:=passive;
WHILE q<>0 DO
BEGIN
curp:=mem[q].hh.rh;
freenode(q,2);
q:=curp;
END;
IF eqtb[3614].int>2 THEN
printnl(686);
threshold:=eqtb[3585].int;
secondpass:=true;
END;
30:
IF eqtb[3614].int>2 THEN
enddiagnosti(true);
;
{770}Postlinebrea(finalwidowpe);
{759}q:=mem[10006].hh.rh;
WHILE q<>10006 DO
BEGIN
curp:=mem[q].hh.rh;
IF mem[q].hh.b0=2 THEN
freenode(q,7)
ELSE
freenode(q,3);
q:=curp;
END;
q:=passive;
WHILE q<>0 DO
BEGIN
curp:=mem[q].hh.rh;
freenode(q,2);
q:=curp;
END;
parbeginline:=0;
END;
{827}PROCEDURE Newhyphexcep;
LABEL
10,40,45;
VAR
n:smallnumber;
j:smallnumber;
h:hyphpointer;
k:strnumber;
p:halfword;
q:halfword;
s,t:strnumber;
u,v:poolpointer;
BEGIN
scanleftbrac;
{828}n:=0;
p:=0;
WHILE true DO
BEGIN
getnctoken;
CASE curcmd OF
11,12:{830}IF curchr=45 THEN
{831}
BEGIN
IF n>1 THEN
BEGIN
q:=getavail;
mem[q].hh.rh:=p;
mem[q].hh.lh:=n;
p:=q;
END;
END
ELSE
BEGIN
IF eqtb[3200+curchr].hh.rh=0 THEN
BEGIN
printnl(693);
BEGIN
helpptr:=2;
helpline[1]:=694;
helpline[0]:=695;
END;
error;
END
ELSE
IF n<63 THEN
BEGIN
n:=n+1;
hc[n]:=eqtb[3200+curchr].hh.rh;
END;
END;
10,2:BEGIN
IF n>4 THEN
{832}
BEGIN
BEGIN
IF poolptr+n>poolsize THEN
overflow(129,poolsize);
END;
h:=0;
FOR j:=1 TO n DO
BEGIN
h:=(h+h+hc[j])MOD 307;
BEGIN
strpool[poolptr]:=hc[j];
poolptr:=poolptr+1;
END;
END;
s:=makestring;
WHILE mem[p].hh.lh>n-3 DO
BEGIN
q:=mem[p].hh.rh;
BEGIN
mem[p].hh.rh:=avail;
avail:=p;
dynused:=dynused-1;
END;
p:=q;
END;
{833}
IF hyphcount=307 THEN
overflow(696,307);
hyphcount:=hyphcount+1;
WHILE hyphword[h]<>0 DO
BEGIN{834}
k:=hyphword[h];
IF(strstart[k+1]-strstart[k])<(strstart[s+1]-strstart[s])THEN
GOTO 40;
IF(strstart[k+1]-strstart[k])>(strstart[s+1]-strstart[s])THEN
GOTO 45;
u:=strstart[k];
v:=strstart[s];
REPEAT
IF strpool[u]<strpool[v]THEN
GOTO 40;
IF strpool[u]>strpool[v]THEN
GOTO 45;
u:=u+1;
v:=v+1;
UNTIL u=strstart[k+1];
40:
q:=hyphlist[h];
hyphlist[h]:=p;
p:=q;
t:=hyphword[h];
hyphword[h]:=s;
s:=t;
45:;
IF h>0 THEN
h:=h-1
ELSE
h:=307;
END;
hyphword[h]:=s;
hyphlist[h]:=p;
END;
IF curcmd=2 THEN
BEGIN{369}
BEGIN
getnctoken;
IF curcmd<>10 THEN
backinput;
END;
GOTO 10;
END;
n:=0;
p:=0;
END;
OTHERS:{829}BEGIN
printnl(690);
BEGIN
helpptr:=2;
helpline[1]:=691;
helpline[0]:=692;
END;
error;
END
END;
END;
10:
END;
{835}{837}
FUNCTION Newtrieop(d,n:smallnumber;
v:quarterword):quarterword;
LABEL
10;
VAR
h:0..510;
u:quarterword;
BEGIN
h:=(n+313*d+361*v)MOD 510;
WHILE true DO
BEGIN
u:=trieophash[h];
IF u=0 THEN
BEGIN
IF trieopptr>=254 THEN
BEGIN
trieopptr:=255;
Newtrieop:=0;
GOTO 10;
END;
trieopptr:=trieopptr+1;
hyfdistance[trieopptr]:=d;
hyfnum[trieopptr]:=n;
hyfnext[trieopptr]:=v;
trieophash[h]:=trieopptr;
Newtrieop:=trieopptr;
GOTO 10;
END;
IF(hyfdistance[u]=d)AND(hyfnum[u]=n)AND(hyfnext[u]=v)THEN
BEGIN
Newtrieop:=u;
GOTO 10;
END;
IF h>0 THEN
h:=h-1
ELSE
h:=255;
END;
10:
END;
{840}
FUNCTION Trienode(p:triepointer):triepointer;
LABEL
10;
VAR
h:triepointer;
q:triepointer;
BEGIN
h:=(triec[p]+1009*trieo[p]+2718*triel[p]+3142*trier[p])MOD
triesize;
WHILE true DO
BEGIN
q:=triehash[h];
IF q=0 THEN
BEGIN
triehash[h]:=p;
Trienode:=p;
GOTO 10;
END;
IF(triec[q]=triec[p])AND(trieo[q]=trieo[p])AND(triel[q]=triel[p])AND(
trier[q]=trier[p])THEN
BEGIN
Trienode:=q;
GOTO 10;
END;
IF h>0 THEN
h:=h-1
ELSE
h:=triesize;
END;
10:
END;
{841}
FUNCTION Compresstrie(p:triepointer):triepointer;
BEGIN
IF p=0 THEN
Compresstrie:=0
ELSE
BEGIN
triel[p]:=Compresstrie(
triel[p]);
trier[p]:=Compresstrie(trier[p]);
Compresstrie:=Trienode(p);
END;
END;
{842}
PROCEDURE Initpatternm;
VAR
h:0..510;
p:triepointer;
BEGIN
FOR h:=0 TO 510 DO trieophash[h]:=0;
trieopptr:=0;
triel[0]:=0;
triec[0]:=0;
trieptr:=0;
FOR p:=0 TO triesize DO triehash[p]:=0;
END;
{844}
PROCEDURE Inittriememo;
VAR
p:triepointer;
BEGIN
FOR p:=0 TO trieptr DO triehash[p]:=0;
triemax:=128;
triemin:=128;
trie[0].rh:=1;
trietaken[0]:=false;
FOR p:=1 TO 128 DO
BEGIN
trie[p].lh:=p-1;
trie[p].rh:=p+1;
trietaken[p]:=false;
END;
END;
{846}
PROCEDURE Firstfit(p:triepointer);
LABEL
45,40;
VAR
h:triepointer;
z:triepointer;
q:triepointer;
c:asciicode;
BEGIN
c:=triec[p];
IF c<triemin THEN
triemin:=c;
z:=trie[triemin-1].rh;
WHILE true DO
BEGIN
IF z<c THEN
GOTO 45;
h:=z-c;
{847}
IF triemax<h+128 THEN
BEGIN
IF triesize<=h+128 THEN
overflow(697,
triesize);
REPEAT
triemax:=triemax+1;
trietaken[triemax]:=false;
trie[triemax].rh:=triemax+1;
trie[triemax].lh:=triemax-1;
UNTIL triemax=h+128;
END;
IF trietaken[h]THEN
GOTO 45;
{848}q:=trier[p];
WHILE q>0 DO
BEGIN
IF trie[h+triec[q]].rh=0 THEN
GOTO 45;
q:=trier[q];
END;
GOTO 40;
45:
z:=trie[z].rh;
END;
40:{849}
trietaken[h]:=true;
triehash[p]:=h;
q:=p;
REPEAT
z:=h+triec[q];
trie[trie[z].rh].lh:=trie[z].lh;
trie[trie[z].lh].rh:=trie[z].rh;
trie[z].rh:=0;
q:=trier[q];
UNTIL q=0;
END;
{850}
PROCEDURE Triepack(p:triepointer);
VAR
q:triepointer;
BEGIN
REPEAT
q:=triel[p];
IF(q>0)AND(triehash[q]=0)THEN
BEGIN
Firstfit(q);
Triepack(q);
END;
p:=trier[p];
UNTIL p=0;
END;
{852}
PROCEDURE Triefix(p:triepointer);
VAR
q:triepointer;
c:asciicode;
z:triepointer;
BEGIN
z:=triehash[p];
WHILE p<>0 DO
BEGIN
q:=triel[p];
c:=triec[p];
trie[z+c].rh:=triehash[q];
trie[z+c].b1:=c;
trie[z+c].b0:=trieo[p];
IF q>0 THEN
Triefix(q);
p:=trier[p];
END;
END;
{853}
PROCEDURE Newpatterns;
LABEL
30,31;
VAR
k,l:smallnumber;
digitsensed:boolean;
v:quarterword;
p,q:triepointer;
firstchild:boolean;
c:asciicode;
r,s:triepointer;
h:twohalves;
BEGIN
scanleftbrac;
Initpatternm;
{854}k:=0;
hyf[0]:=0;
digitsensed:=false;
WHILE true DO
BEGIN
getnctoken;
CASE curcmd OF
11,12:{855}IF digitsensed OR(curchr<48)OR(curchr>57)THEN
BEGIN
IF curchr=46 THEN
curchr:=127
ELSE
BEGIN
curchr:=eqtb[3200+curchr]
.hh.rh;
IF curchr=0 THEN
BEGIN
printnl(700);
BEGIN
helpptr:=1;
helpline[0]:=699;
END;
error;
curchr:=127;
END;
END;
IF k<63 THEN
BEGIN
k:=k+1;
hc[k]:=curchr;
hyf[k]:=0;
digitsensed:=false;
END;
END
ELSE
BEGIN
hyf[k]:=curchr-48;
digitsensed:=true;
END;
10,2:BEGIN
IF k>0 THEN
{856}
BEGIN{858}
l:=k;
v:=0;
WHILE true DO
BEGIN
IF hyf[l]<>0 THEN
v:=Newtrieop(k-l,hyf[l],v);
IF l>0 THEN
l:=l-1
ELSE
GOTO 31;
END;
31:;
q:=0;
WHILE l<k DO
BEGIN
l:=l+1;
c:=hc[l];
p:=triel[q];
firstchild:=true;
WHILE(p>0)AND(c>triec[p])DO
BEGIN
q:=p;
p:=trier[q];
firstchild:=false;
END;
IF(p=0)OR(c<triec[p])THEN
{857}
BEGIN
IF trieptr=triesize THEN
overflow(
697,triesize);
trieptr:=trieptr+1;
trier[trieptr]:=p;
p:=trieptr;
triel[p]:=0;
IF firstchild THEN
triel[q]:=p
ELSE
trier[q]:=p;
triec[p]:=c;
trieo[p]:=0;
END;
q:=p;
END;
IF trieo[q]<>0 THEN
BEGIN
printnl(701);
BEGIN
helpptr:=1;
helpline[0]:=699;
END;
error;
END;
trieo[q]:=v;
END;
IF curcmd=2 THEN
BEGIN{369}
BEGIN
getnctoken;
IF curcmd<>10 THEN
backinput;
END;
GOTO 30;
END;
k:=0;
hyf[0]:=0;
digitsensed:=false;
END;
OTHERS:BEGIN
printnl(698);
BEGIN
helpptr:=1;
helpline[0]:=699;
END;
error;
passblock(1);
GOTO 30;
END
END;
END;
30:;
triel[0]:=Compresstrie(triel[0]);
{859}Inittriememo;
IF triel[0]<>0 THEN
BEGIN
Firstfit(triel[0]);
Triepack(triel[0]);
END;
{851}r:=0;
WHILE trietaken[r]DO r:=r+1;
triehash[0]:=r;
Triefix(triel[0]);
r:=0;
h.rh:=0;
h.b0:=0;
h.b1:=0;
REPEAT
s:=trie[r].rh;
trie[r]:=h;
r:=s;
UNTIL r>triemax;
END;
{861}
FUNCTION Prunepagetop(p:halfword):halfword;
VAR
prevp:halfword;
q:halfword;
BEGIN
prevp:=10003;
mem[10003].hh.rh:=p;
WHILE p<>0 DO
CASE mem[p].hh.b0 OF
0,1,2:{862}BEGIN
q:=newskipparam(9);
mem[prevp].hh.rh:=q;
mem[q].hh.rh:=p;
IF mem[tempptr+1].int>mem[p+3].int THEN
mem[tempptr+1].int:=mem[tempptr
+1].int-mem[p+3].int
ELSE
mem[tempptr+1].int:=0;
p:=0;
END;
8,4,3:BEGIN
prevp:=p;
p:=mem[prevp].hh.rh;
END;
10,11,12:BEGIN
q:=p;
p:=mem[q].hh.rh;
mem[q].hh.rh:=0;
mem[prevp].hh.rh:=p;
flushnodelis(q);
END;
OTHERS:confusion(702)
END;
Prunepagetop:=mem[10003].hh.rh;
END;
{863}
FUNCTION Vertbreak(p:halfword;
h:scaled):halfword;
LABEL
30,45,90;
VAR
prevp:halfword;
q,r:halfword;
pi:integer;
b:integer;
leastbadness:integer;
bestplace:halfword;
prevdp:scaled;
t:smallnumber;
BEGIN
prevp:=p;
leastbadness:=1073741823;
activewidth[1]:=0;
activewidth[2]:=0;
activewidth[3]:=0;
activewidth[4]:=0;
activewidth[5]:=0;
activewidth[6]:=0;
prevdp:=0;
WHILE true DO
BEGIN{865}
IF p=0 THEN
pi:=-10000
ELSE
{866}
CASE mem[p].hh.
b0 OF
0,1,2:BEGIN
activewidth[1]:=activewidth[1]+prevdp+mem[p+3].int;
prevdp:=mem[p+2].int;
GOTO 45;
END;
8:{1242}GOTO 45;
10:IF(mem[prevp].hh.b0<=9)THEN
pi:=0
ELSE
GOTO 90;
11:BEGIN
IF mem[p].hh.rh=0 THEN
t:=12
ELSE
t:=mem[mem[p].hh.rh].hh.b0;
IF t=10 THEN
pi:=0
ELSE
GOTO 90;
END;
12:pi:=mem[p+1].int;
4,3:GOTO 45;
OTHERS:confusion(703)
END;
{867}
IF pi<10000 THEN
BEGIN{868}
IF activewidth[1]<h THEN
IF(activewidth[
3]<>0)OR(activewidth[4]<>0)OR(activewidth[5]<>0)THEN
b:=0
ELSE
b:=
badness(h-activewidth[1],activewidth[2])
ELSE
IF activewidth[1]-h>
activewidth[6]THEN
b:=1073741823
ELSE
b:=badness(activewidth[1]-h,
activewidth[6]);
IF b<=10000 THEN
IF pi<=-10000 THEN
b:=pi
ELSE
b:=b+pi;
IF b<=leastbadness THEN
BEGIN
bestplace:=p;
leastbadness:=b;
bestheightpl:=activewidth[1]+prevdp;
END;
IF(b=1073741823)OR(pi<=-10000)THEN
GOTO 30;
END;
IF(mem[p].hh.b0<10)OR(mem[p].hh.b0>11)THEN
GOTO 45;
90:{869}
IF mem[p].hh.b0=11 THEN
q:=p
ELSE
BEGIN
q:=mem[p+1].hh.lh;
activewidth[2+mem[q].hh.b0]:=activewidth[2+mem[q].hh.b0]+mem[q+2].int;
activewidth[6]:=activewidth[6]+mem[q+3].int;
IF(mem[q].hh.b1<>0)AND(mem[q+3].int<>0)THEN
BEGIN
printnl(704);
BEGIN
helpptr:=4;
helpline[3]:=705;
helpline[2]:=706;
helpline[1]:=707;
helpline[0]:=674;
END;
error;
r:=newspec(q);
mem[r].hh.b1:=0;
deletegluere(q);
mem[p+1].hh.lh:=r;
END;
END;
activewidth[1]:=activewidth[1]+prevdp+mem[q+1].int;
prevdp:=0;
45:
IF prevdp>eqtb[4013].int THEN
BEGIN
activewidth[1]:=activewidth[1]+
prevdp-eqtb[4013].int;
prevdp:=eqtb[4013].int;
END;
;
prevp:=p;
p:=mem[prevp].hh.rh;
END;
30:
Vertbreak:=bestplace;
END;
{870}
FUNCTION Vsplit(n:quarterword;
h:scaled):halfword;
LABEL
10,30;
VAR
v:halfword;
p:halfword;
q:halfword;
BEGIN
v:=eqtb[2638+n].hh.rh;
IF curmark[3]<>0 THEN
BEGIN
deletetokenr(curmark[3]);
curmark[3]:=0;
deletetokenr(curmark[4]);
curmark[4]:=0;
END;
{871}
IF v=0 THEN
BEGIN
Vsplit:=0;
GOTO 10;
END;
IF mem[v].hh.b0<>1 THEN
BEGIN
printnl(708);
BEGIN
helpptr:=2;
helpline[1]:=709;
helpline[0]:=710;
END;
error;
Vsplit:=0;
GOTO 10;
END;
q:=Vertbreak(mem[v+5].hh.rh,h);
{872}p:=mem[v+5].hh.rh;
IF p=q THEN
mem[v+5].hh.rh:=0
ELSE
WHILE true DO
BEGIN
IF mem[p].hh.b0=4
THEN
IF curmark[3]=0 THEN
BEGIN
curmark[3]:=mem[p+1].int;
curmark[4]:=curmark[3];
mem[curmark[3]].hh.lh:=mem[curmark[3]].hh.lh+2;
END
ELSE
BEGIN
deletetokenr(curmark[4]);
curmark[4]:=mem[p+1].int;
mem[curmark[4]].hh.lh:=mem[curmark[4]].hh.lh+1;
END;
IF mem[p].hh.rh=q THEN
BEGIN
mem[p].hh.rh:=0;
GOTO 30;
END;
p:=mem[p].hh.rh;
END;
30:;
q:=Prunepagetop(q);
p:=mem[v+5].hh.rh;
freenode(v,7);
IF q=0 THEN
eqtb[2638+n].hh.rh:=0
ELSE
eqtb[2638+n].hh.rh:=vpackage(q,0,
1,1073741823);
Vsplit:=vpackage(p,h,0,eqtb[4013].int);
10:
END;
{877}
PROCEDURE Freezepagesp(s:smallnumber);
BEGIN
pagecontents:=s;
pagesize:=eqtb[4011].int;
pagedepthmax:=eqtb[4012].int;
curpagedepth:=0;
pagesofar[1]:=0;
pagesofar[2]:=0;
pagesofar[3]:=0;
pagesofar[4]:=0;
pagesofar[5]:=0;
pagesofar[6]:=0;
leastpagebad:=1073741823;
END;
{882}PROCEDURE Buildpage;
LABEL
10,30,31,22,80,90;
VAR
p:halfword;
q,r,s:halfword;
prevp:halfword;
b:integer;
pi:integer;
n:0..255;
delta,h,w:scaled;
wait:boolean;
BEGIN
IF(mem[10001].hh.rh=0)OR outputactive THEN
GOTO 10;
REPEAT
22:
p:=mem[10001].hh.rh;
{884}
IF lastpageglue<>65535 THEN
deletegluere(lastpageglue);
IF mem[p].hh.b0=10 THEN
BEGIN
lastpageglue:=mem[p+1].hh.lh;
mem[lastpageglue].hh.rh:=mem[lastpageglue].hh.rh+1;
END
ELSE
lastpageglue:=65535;
{885}{888}
CASE mem[p].hh.b0 OF
0,1,2:IF pagecontents<2 THEN
{889}
BEGIN
IF
pagecontents=0 THEN
Freezepagesp(2)
ELSE
pagecontents:=2;
q:=newskipparam(8);
mem[q].hh.rh:=p;
IF mem[tempptr+1].int>mem[p+3].int THEN
mem[tempptr+1].int:=mem[tempptr
+1].int-mem[p+3].int
ELSE
mem[tempptr+1].int:=0;
mem[q].hh.rh:=p;
mem[10001].hh.rh:=q;
GOTO 22;
END
ELSE
{890}
BEGIN
pagesofar[1]:=pagesofar[1]+curpagedepth+mem[p+3].int;
curpagedepth:=mem[p+2].int;
GOTO 80;
END;
8:{1241}GOTO 80;
10:IF pagecontents<2 THEN
GOTO 31
ELSE
IF(mem[pagetail].hh.b0<=9)THEN
pi
:=0
ELSE
GOTO 90;
11:IF pagecontents<2 THEN
GOTO 31
ELSE
IF mem[p].hh.rh=0 THEN
GOTO 10
ELSE
IF mem[mem[p].hh.rh].hh.b0=10 THEN
pi:=0
ELSE
GOTO 90;
12:IF pagecontents<2 THEN
GOTO 31
ELSE
pi:=mem[p+1].int;
4:GOTO 80;
3:{895}BEGIN
IF pagecontents=0 THEN
Freezepagesp(1);
n:=mem[p].hh.b1;
r:=10000;
WHILE n>=mem[mem[r].hh.rh].hh.b1 DO r:=mem[r].hh.rh;
n:=n;
IF mem[r].hh.b1<>n THEN
{896}
BEGIN
q:=getnode(4);
mem[q].hh.rh:=mem[r].hh.rh;
mem[r].hh.rh:=q;
r:=q;
mem[r].hh.b1:=n;
mem[r].hh.b0:=0;
IF eqtb[2638+n].hh.rh=0 THEN
mem[r+1].int:=0
ELSE
mem[r+1].int:=mem[eqtb
[2638+n].hh.rh+3].int+mem[eqtb[2638+n].hh.rh+2].int;
mem[r+2].hh.lh:=0;
q:=eqtb[2379+n].hh.rh;
h:=xovern(mem[r+1].int,1000)*eqtb[3622+n].int;
pagesize:=pagesize-h;
pagesofar[1]:=pagesofar[1]+mem[q+1].int;
pagesofar[2+mem[q].hh.b0]:=pagesofar[2+mem[q].hh.b0]+mem[q+2].int;
pagesofar[6]:=pagesofar[6]+mem[q+3].int;
IF(mem[q].hh.b1<>0)AND(mem[q+3].int<>0)THEN
BEGIN
printnl(721);
printint(n);
BEGIN
helpptr:=3;
helpline[2]:=722;
helpline[1]:=723;
helpline[0]:=674;
END;
error;
END;
END;
IF mem[r].hh.b0=0 THEN
BEGIN
mem[r+2].hh.rh:=p;
delta:=pagesize-pagesofar[1]+pagesofar[6];
h:=xovern(mem[p+1].int,1000)*eqtb[3622+n].int;
IF(h<=delta)AND(mem[p+1].int+mem[r+1].int<=eqtb[4024+n].int)THEN
BEGIN
pagesize:=pagesize-h;
mem[r+1].int:=mem[r+1].int+mem[p+1].int;
END
ELSE
{897}
BEGIN
IF eqtb[3622+n].int<=0 THEN
w:=1073741823
ELSE
w:=
xovern(delta,eqtb[3622+n].int)*1000;
IF w>eqtb[4024+n].int-mem[r+1].int THEN
w:=eqtb[4024+n].int-mem[r+1].int
;
q:=Vertbreak(mem[p+2].int,w);
mem[r+1].int:=mem[r+1].int+bestheightpl;
bestheightpl:=xovern(bestheightpl,1000)*eqtb[3622+n].int;
pagesize:=pagesize-bestheightpl;
mem[r].hh.b0:=1;
mem[r+3].hh.rh:=q;
mem[r+3].hh.lh:=p;
IF q=0 THEN
inspenalties:=inspenalties-10000
ELSE
IF mem[q].hh.b0=12
THEN
inspenalties:=inspenalties+mem[q+1].int;
END;
END;
GOTO 80;
END;
OTHERS:confusion(718)
END;
{893}
IF pi<10000 THEN
BEGIN{894}
IF pagesofar[1]<pagesize THEN
IF(
pagesofar[3]<>0)OR(pagesofar[4]<>0)OR(pagesofar[5]<>0)THEN
b:=0
ELSE
b:=
badness(pagesize-pagesofar[1],pagesofar[2])
ELSE
IF pagesofar[1]-pagesize
>pagesofar[6]THEN
b:=1073741823
ELSE
b:=badness(pagesofar[1]-pagesize,
pagesofar[6]);
IF b<=10000 THEN
IF pi<=-10000 THEN
b:=pi
ELSE
b:=b+pi+inspenalties;
IF b<=leastpagebad THEN
BEGIN
bestpagebrea:=p;
bestsize:=pagesize;
leastpagebad:=b;
r:=mem[10000].hh.rh;
WHILE r<>10000 DO
BEGIN
mem[r+2].hh.lh:=mem[r+2].hh.rh;
r:=mem[r].hh.rh;
END;
END;
IF(b=1073741823)OR(pi<=-10000)THEN
{898}
BEGIN{899}
IF mem[bestpagebrea].hh
.b0=12 THEN
BEGIN
geqworddefin(3619,mem[bestpagebrea+1].int);
mem[bestpagebrea+1].int:=10000;
END
ELSE
geqworddefin(3619,10000);
IF curmark[2]<>0 THEN
BEGIN
IF curmark[0]<>0 THEN
deletetokenr(curmark[0
]);
curmark[0]:=curmark[2];
mem[curmark[0]].hh.lh:=mem[curmark[0]].hh.lh+1;
deletetokenr(curmark[1]);
curmark[1]:=0;
END;
{900}
IF p=bestpagebrea THEN
bestpagebrea:=0;
{901}
IF eqtb[2893].hh.rh<>0 THEN
BEGIN
printnl(724);
BEGIN
helpptr:=2;
helpline[1]:=725;
helpline[0]:=726;
END;
error;
flushnodelis(eqtb[2893].hh.rh);
eqtb[2893].hh.rh:=0;
END;
{904}r:=mem[10000].hh.rh;
WHILE r<>10000 DO
BEGIN
IF mem[r+2].hh.lh<>0 THEN
BEGIN
n:=mem[r].hh.b1;
IF eqtb[2638+n].hh.rh=0 THEN
eqtb[2638+n].hh.rh:=newnullbox;
p:=eqtb[2638+n].hh.rh+5;
WHILE mem[p].hh.rh<>0 DO p:=mem[p].hh.rh;
mem[r+2].hh.rh:=p;
END;
r:=mem[r].hh.rh;
END;
q:=10004;
mem[q].hh.rh:=0;
prevp:=10002;
p:=mem[prevp].hh.rh;
WHILE p<>bestpagebrea DO
BEGIN
IF mem[p].hh.b0=3 THEN
{906}
BEGIN
r:=mem[
10000].hh.rh;
WHILE mem[r].hh.b1<>mem[p].hh.b1 DO r:=mem[r].hh.rh;
IF mem[r+2].hh.lh=0 THEN
wait:=true
ELSE
BEGIN
wait:=false;
s:=mem[p+2].int;
mem[mem[r+2].hh.rh].hh.rh:=s;
s:=mem[r+2].hh.rh;
IF mem[r+2].hh.lh=p THEN
{907}
BEGIN
IF mem[r].hh.b0=1 THEN
IF(mem[r+3].hh
.lh=p)AND(mem[r+3].hh.rh<>0)THEN
BEGIN
WHILE mem[s].hh.rh<>mem[r+3].hh.
rh DO s:=mem[s].hh.rh;
mem[p+2].int:=Prunepagetop(mem[r+3].hh.rh);
IF mem[p+2].int<>0 THEN
BEGIN
tempptr:=vpackage(mem[p+2].int,0,1,
1073741823);
mem[p+1].int:=mem[tempptr+3].int+mem[tempptr+2].int;
freenode(tempptr,7);
END;
mem[s].hh.rh:=0;
wait:=(mem[p+2].int<>0);
END;
mem[r+2].hh.lh:=0;
n:=mem[r].hh.b1;
tempptr:=mem[eqtb[2638+n].hh.rh+5].hh.rh;
freenode(eqtb[2638+n].hh.rh,7);
eqtb[2638+n].hh.rh:=vpackage(tempptr,0,1,1073741823);
END
ELSE
BEGIN
WHILE mem[s].hh.rh<>0 DO s:=mem[s].hh.rh;
mem[r+2].hh.rh:=s;
END;
END;
{908}mem[prevp].hh.rh:=mem[p].hh.rh;
mem[p].hh.rh:=0;
IF wait THEN
BEGIN
mem[q].hh.rh:=p;
q:=p;
END
ELSE
freenode(p,3);
p:=prevp;
END
ELSE
IF mem[p].hh.b0=4 THEN
{902}
BEGIN
IF curmark[1]=0 THEN
BEGIN
curmark[1]:=mem[p+1].int;
mem[curmark[1]].hh.lh:=mem[curmark[1]].hh.lh+1;
END;
IF curmark[2]<>0 THEN
deletetokenr(curmark[2]);
curmark[2]:=mem[p+1].int;
mem[curmark[2]].hh.lh:=mem[curmark[2]].hh.lh+1;
END;
prevp:=p;
p:=mem[prevp].hh.rh;
END;
{903}
IF p<>0 THEN
BEGIN
IF mem[10001].hh.rh=0 THEN
IF nestptr=0 THEN
curlist.tailfield:=pagetail
ELSE
nest[0].tailfield:=pagetail;
mem[pagetail].hh.rh:=mem[10001].hh.rh;
mem[10001].hh.rh:=p;
mem[prevp].hh.rh:=0;
END;
eqtb[2893].hh.rh:=vpackage(mem[10002].hh.rh,bestsize,0,pagedepthmax);
{881}pagecontents:=0;
pagetail:=10002;
mem[10002].hh.rh:=0;
lastpageglue:=65535;
inspenalties:=0;
curpagedepth:=0;
pagedepthmax:=0;;
IF q<>10004 THEN
BEGIN
mem[10002].hh.rh:=mem[10004].hh.rh;
pagetail:=q;
END;
{905}r:=mem[10000].hh.rh;
WHILE r<>10000 DO
BEGIN
q:=mem[r].hh.rh;
freenode(r,4);
r:=q;
END;
mem[10000].hh.rh:=10000;
IF(curmark[0]<>0)AND(curmark[1]=0)THEN
BEGIN
curmark[1]:=curmark[0];
mem[curmark[0]].hh.lh:=mem[curmark[0]].hh.lh+1;
END;
IF eqtb[2636].hh.rh<>0 THEN
IF deadcycles>=eqtb[3620].int THEN
{910}
BEGIN
printnl(727);
printint(eqtb[3620].int);
print(728);
BEGIN
helpptr:=3;
helpline[2]:=729;
helpline[1]:=730;
helpline[0]:=731;
END;
error;
END
ELSE
{911}
BEGIN
outputactive:=true;
deadcycles:=deadcycles+1;
pushnest;
curlist.modefield:=-1;
curlist.auxfield:=-65536000;
curlist.mlfield:=-line;
begintokenli(eqtb[2636].hh.rh,5);
newsavelevel(10);
scanleftbrac;
GOTO 10;
END;
{909}
BEGIN
IF mem[10002].hh.rh<>0 THEN
BEGIN
IF mem[10001].hh.rh=0 THEN
IF nestptr=0 THEN
curlist.tailfield:=pagetail
ELSE
nest[0].tailfield:=
pagetail
ELSE
mem[pagetail].hh.rh:=mem[10001].hh.rh;
mem[10001].hh.rh:=mem[10002].hh.rh;
mem[10002].hh.rh:=0;
pagetail:=10002;
END;
shipout(eqtb[2893].hh.rh);
eqtb[2893].hh.rh:=0;
GOTO 30;
END;
END;
END;
IF(mem[p].hh.b0<10)OR(mem[p].hh.b0>11)THEN
GOTO 80;
90:{892}
IF mem[p].hh.b0=11 THEN
q:=p
ELSE
BEGIN
q:=mem[p+1].hh.lh;
pagesofar[2+mem[q].hh.b0]:=pagesofar[2+mem[q].hh.b0]+mem[q+2].int;
pagesofar[6]:=pagesofar[6]+mem[q+3].int;
IF(mem[q].hh.b1<>0)AND(mem[q+3].int<>0)THEN
BEGIN
printnl(719);
BEGIN
helpptr:=4;
helpline[3]:=720;
helpline[2]:=706;
helpline[1]:=707;
helpline[0]:=674;
END;
error;
r:=newspec(q);
mem[r].hh.b1:=0;
deletegluere(q);
mem[p+1].hh.lh:=r;
END;
END;
pagesofar[1]:=pagesofar[1]+curpagedepth+mem[q+1].int;
curpagedepth:=0;
80:{891}
IF curpagedepth>pagedepthmax THEN
BEGIN
pagesofar[1]:=pagesofar[
1]+curpagedepth-pagedepthmax;
curpagedepth:=pagedepthmax;
END;
;
{886}mem[pagetail].hh.rh:=p;
pagetail:=p;
mem[10001].hh.rh:=mem[p].hh.rh;
mem[p].hh.rh:=0;
GOTO 30;
31:{887}
mem[10001].hh.rh:=mem[p].hh.rh;
mem[p].hh.rh:=0;
flushnodelis(p);
30:;
UNTIL mem[10001].hh.rh=0;
{883}
IF nestptr=0 THEN
curlist.tailfield:=10001
ELSE
nest[0].tailfield:=
10001;
10:
END;
{915}{919}PROCEDURE Missingfont;
BEGIN
printnl(736);
BEGIN
helpptr:=4;
helpline[3]:=737;
helpline[2]:=738;
helpline[1]:=739;
helpline[0]:=740;
END;
error;
END;
{929}
PROCEDURE Appspace;
VAR
p:halfword;
q:halfword;
f:internalfont;
k:0..fontmemsize;
BEGIN
IF(curlist.auxfield>=2000)AND(eqtb[2374].hh.rh<>0)THEN
q:=
newparamglue(12)
ELSE
BEGIN
IF eqtb[2373].hh.rh<>0 THEN
p:=eqtb[2373].hh.
rh
ELSE
{928}
BEGIN
p:=fontglue[eqtb[2894].hh.rh];
IF p=0 THEN
BEGIN
f:=eqtb[2894].hh.rh;
p:=newspec(0);
k:=parambase[f]+2;
mem[p+1].int:=fontinfo[k].int;
mem[p+2].int:=fontinfo[k+1].int;
mem[p+3].int:=fontinfo[k+2].int;
fontglue[f]:=p;
END;
END;
p:=newspec(p);
{930}
IF curlist.auxfield>=2000 THEN
mem[p+1].int:=mem[p+1].int+fontinfo[
7+parambase[eqtb[2894].hh.rh]].int;
mem[p+2].int:=xnoverd(mem[p+2].int,curlist.auxfield,1000);
mem[p+3].int:=xnoverd(mem[p+3].int,1000,curlist.auxfield);
q:=newglue(p);
mem[p].hh.rh:=0;
END;
mem[curlist.tailfield].hh.rh:=q;
curlist.tailfield:=q;
END;
{933}
PROCEDURE Insertdollar;
BEGIN
printnl(741);
BEGIN
helpptr:=2;
helpline[1]:=742;
helpline[0]:=743;
END;
backerror;
curcmd:=3;
curchr:=36;
curtok:=804;
END;
{935}
PROCEDURE Youcant;
BEGIN
printnl(744);
printcmdchr(curcmd,curchr);
print(745);
printmode(curlist.modefield);
END;
{936}
PROCEDURE Reportillega;
BEGIN
Youcant;
BEGIN
helpptr:=4;
helpline[3]:=746;
helpline[2]:=747;
helpline[1]:=748;
helpline[0]:=749;
END;
error;
END;
{937}
FUNCTION Privileged:boolean;
BEGIN
IF curlist.modefield>0 THEN
Privileged:=true
ELSE
BEGIN
Reportillega;
Privileged:=false;
END;
END;
{941}
FUNCTION Itsallover:boolean;
LABEL
10;
BEGIN
IF Privileged THEN
BEGIN
IF(10002=pagetail)AND(curlist.headfield=
curlist.tailfield)AND((deadcycles=0)OR(deadcycles>=100))THEN
BEGIN
IF
deadcycles>0 THEN
BEGIN
printnl(752);
END;
Itsallover:=true;
GOTO 10;
END;
backinput;
BEGIN
mem[curlist.tailfield].hh.rh:=newnullbox;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield+1].int:=eqtb[4010].int;
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(-10000);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
Buildpage;
END;
Itsallover:=false;
10:
END;
{948}
PROCEDURE Appendglue;
VAR
s:smallnumber;
BEGIN
s:=curchr;
CASE s OF
0:curval:=4;
1:curval:=8;
2:curval:=12;
3:curval:=16;
4:scanglue(false);
5:scanglue(true);
END;
BEGIN
mem[curlist.tailfield].hh.rh:=newglue(curval);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
IF s>=4 THEN
BEGIN
mem[curval].hh.rh:=mem[curval].hh.rh-1;
IF s>4 THEN
mem[curlist.tailfield].hh.b1:=99;
END;
END;
{949}
PROCEDURE Appendkern;
VAR
s:quarterword;
BEGIN
s:=curchr;
scandimen(s=99,false,false);
BEGIN
mem[curlist.tailfield].hh.rh:=newkern(curval);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b1:=s;
END;
{952}
PROCEDURE Offsave;
VAR
p:halfword;
BEGIN
IF curgroup=0 THEN
{955}
BEGIN
printnl(771);
printcmdchr(curcmd,curchr);
BEGIN
helpptr:=1;
helpline[0]:=772;
END;
error;
END
ELSE
BEGIN
backinput;
p:=getavail;
mem[10003].hh.rh:=p;
printnl(763);
{954}
CASE curgroup OF
15:BEGIN
mem[p].hh.lh:=6454;
printesc(349);
END;
16:BEGIN
mem[p].hh.lh:=804;
printchar(36);
END;
17:BEGIN
mem[p].hh.lh:=6455;
mem[p].hh.rh:=getavail;
p:=mem[p].hh.rh;
mem[p].hh.lh:=3118;
printesc(770);
END;
OTHERS:BEGIN
mem[p].hh.lh:=637;
printchar(125);
END
END;
print(764);
begintokenli(mem[10003].hh.rh,3);
BEGIN
helpptr:=5;
helpline[4]:=765;
helpline[3]:=766;
helpline[2]:=767;
helpline[1]:=768;
helpline[0]:=769;
END;
error;
END;
END;
{958}
PROCEDURE Extrarightbr;
BEGIN
printnl(777);
CASE curgroup OF
15:printesc(349);
16:printchar(36);
17:printesc(630);
END;
BEGIN
helpptr:=5;
helpline[4]:=778;
helpline[3]:=779;
helpline[2]:=780;
helpline[1]:=781;
helpline[0]:=782;
END;
error;
alignstate:=alignstate+1;
END;
{964}
PROCEDURE Boxend;
VAR
p:halfword;
BEGIN
IF savestack[saveptr+0].int<1073741824 THEN
{965}
BEGIN
IF curbox<>0
THEN
BEGIN
mem[curbox+4].int:=savestack[saveptr+0].int;
IF Abs(curlist.modefield)=1 THEN
BEGIN
appendtovlis(curbox);
IF curlist.modefield>0 THEN
Buildpage;
END
ELSE
BEGIN
IF Abs(curlist.modefield)=185 THEN
BEGIN
p:=newnoad;
mem[p+1].hh.rh:=2;
mem[p+1].hh.lh:=curbox;
curbox:=p;
END;
mem[curlist.tailfield].hh.rh:=curbox;
curlist.tailfield:=curbox;
END;
END;
END
ELSE
IF savestack[saveptr+0].int<1073742336 THEN
{966}
IF savestack[
saveptr+0].int<1073742080 THEN
eqdefine(-1073739186+savestack[saveptr+0]
.int,100,curbox)
ELSE
geqdefine(-1073739442+savestack[saveptr+0].int,100,
curbox)
ELSE
IF curbox<>0 THEN
IF savestack[saveptr+0].int>1073742336
THEN
{967}
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF((curcmd=26)AND(Abs(curlist.modefield)<>1))OR((curcmd=27)AND(Abs(
curlist.modefield)=1))THEN
BEGIN
Appendglue;
mem[curlist.tailfield].hh.b1:=savestack[saveptr+0].int-(1073742237);
mem[curlist.tailfield+1].hh.rh:=curbox;
END
ELSE
BEGIN
printnl(798);
BEGIN
helpptr:=3;
helpline[2]:=799;
helpline[1]:=800;
helpline[0]:=801;
END;
error;
flushnodelis(curbox);
END;
END
ELSE
shipout(curbox);
END;
{968}PROCEDURE Beginbox;
LABEL
10;
VAR
p:halfword;
k:halfword;
n:eightbits;
BEGIN
CASE curchr OF
0:BEGIN
scaneightbit;
curbox:=eqtb[2638+curval].hh.rh;
eqtb[2638+curval].hh.rh:=0;
END;
1:BEGIN
scaneightbit;
curbox:=copynodelist(eqtb[2638+curval].hh.rh);
END;
2:{969}BEGIN
curbox:=0;
IF(curlist.modefield=1)AND(curlist.headfield=curlist.tailfield)THEN
{970}
BEGIN
Youcant;
BEGIN
helpptr:=2;
helpline[1]:=802;
helpline[0]:=803;
END;
error;
END
ELSE
BEGIN
IF NOT(curlist.tailfield>10000)THEN
IF(mem[curlist.
tailfield].hh.b0=0)OR(mem[curlist.tailfield].hh.b0=1)THEN
BEGIN
p:=
curlist.headfield;
curbox:=curlist.tailfield;
WHILE mem[p].hh.rh<>curlist.tailfield DO p:=mem[p].hh.rh;
curlist.tailfield:=p;
mem[p].hh.rh:=0;
END;
END;
END;
3:{971}BEGIN
scaneightbit;
n:=curval;
IF NOT scankeyword(596)THEN
BEGIN
printnl(804);
BEGIN
helpptr:=2;
helpline[1]:=805;
helpline[0]:=806;
END;
error;
END;
scandimen(false,false,false);
curbox:=Vsplit(n,curval);
END;
OTHERS:{972}BEGIN
k:=curchr-4;
saveptr:=saveptr+1;
scanspec;
IF k=93 THEN
newsavelevel(2)
ELSE
IF k=1 THEN
newsavelevel(3)
ELSE
BEGIN
newsavelevel(4);
k:=1;
END;
pushnest;
curlist.modefield:=-k;
IF k=1 THEN
curlist.auxfield:=-65536000
ELSE
curlist.auxfield:=1000;
GOTO 10;
END
END;
Boxend;
10:
END;
{973}
PROCEDURE Scanbox;
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF curcmd=21 THEN
Beginbox
ELSE
IF(savestack[saveptr+0].int>=1073742337)
AND((curcmd=36)OR(curcmd=35))THEN
BEGIN
curbox:=scanrulespec;
Boxend;
END
ELSE
BEGIN
printnl(807);
BEGIN
helpptr:=3;
helpline[2]:=808;
helpline[1]:=809;
helpline[0]:=810;
END;
backerror;
END;
END;
{975}
PROCEDURE Package(c:smallnumber);
VAR
h:scaled;
f:internalfont;
p:halfword;
BEGIN
unsave;
saveptr:=saveptr-3;
IF curlist.modefield=-93 THEN
curbox:=hpack(mem[curlist.headfield].hh.rh
,savestack[saveptr+2].int,savestack[saveptr+1].int)
ELSE
BEGIN
curbox:=
vpackage(mem[curlist.headfield].hh.rh,savestack[saveptr+2].int,savestack
[saveptr+1].int,1073741823);
IF c=4 THEN
{976}
BEGIN
h:=0;
p:=mem[curbox+5].hh.rh;
IF p<>0 THEN
IF(mem[p].hh.b0=0)OR(mem[p].hh.b0=1)OR(mem[p].hh.b0=2)THEN
h:=mem[p+3].int;
mem[curbox+2].int:=mem[curbox+2].int-h+mem[curbox+3].int;
mem[curbox+3].int:=h;
END;
END;
popnest;
Boxend;
END;
{981}
PROCEDURE Newgraf(indented:boolean);
BEGIN
curlist.alreadyfield:=0;
IF(curlist.modefield=1)OR(curlist.headfield<>curlist.tailfield)THEN
BEGIN
mem[curlist.tailfield].hh.rh:=newparamglue(2);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
pushnest;
curlist.modefield:=93;
curlist.auxfield:=1000;
IF indented THEN
BEGIN
curlist.tailfield:=newnullbox;
mem[curlist.headfield].hh.rh:=curlist.tailfield;
mem[curlist.tailfield+1].int:=eqtb[4006].int;
END;
IF eqtb[2637].hh.rh<>0 THEN
begintokenli(eqtb[2637].hh.rh,6);
IF nestptr=1 THEN
Buildpage;
END;
{983}
PROCEDURE Indentinhmod;
BEGIN
IF curchr>0 THEN
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=
newnullbox;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield+1].int:=eqtb[4006].int;
END;
END;
{985}
PROCEDURE Endgraf;
BEGIN
IF curlist.modefield=93 THEN
BEGIN
IF curlist.headfield=curlist.
tailfield THEN
popnest
ELSE
Linebreak(eqtb[3589].int);
IF eqtb[3602].int<>0 THEN
eqworddefine(3602,0);
IF eqtb[4023].int<>0 THEN
eqworddefine(4023,0);
IF eqtb[2635].hh.rh<>0 THEN
eqdefine(2635,99,0);
errorcount:=0;
END;
END;
{988}
PROCEDURE Begininserto;
BEGIN
IF curlist.modefield<-1 THEN
Reportillega
ELSE
BEGIN
IF curcmd=38
THEN
curval:=255
ELSE
BEGIN
scaneightbit;
IF curval=255 THEN
BEGIN
printnl(813);
BEGIN
helpptr:=1;
helpline[0]:=814;
END;
error;
curval:=0;
END;
END;
savestack[saveptr+0].int:=curval;
saveptr:=saveptr+1;
newsavelevel(13);
scanleftbrac;
pushnest;
curlist.modefield:=-1;
curlist.auxfield:=-65536000;
END;
END;
{990}
PROCEDURE Makemark;
VAR
p:halfword;
BEGIN
IF curlist.modefield<-1 THEN
Reportillega
ELSE
BEGIN
p:=scantoks(
false,true);
p:=getnode(2);
mem[p].hh.b0:=4;
mem[p].hh.b1:=0;
mem[p+1].int:=defref;
mem[curlist.tailfield].hh.rh:=p;
curlist.tailfield:=p;
END;
END;
{992}
PROCEDURE Changeaux;
BEGIN
IF curchr<>Abs(curlist.modefield)THEN
Reportillega
ELSE
BEGIN
scanoptional;
IF curchr=1 THEN
BEGIN
scandimen(false,false,false);
curlist.auxfield:=curval;
END
ELSE
BEGIN
scanint;
IF(curval<=0)OR(curval>65536)THEN
BEGIN
printnl(815);
BEGIN
helpptr:=1;
helpline[0]:=816;
END;
interror(curval);
END
ELSE
curlist.auxfield:=curval;
END;
END;
END;
{994}
PROCEDURE Appendpenalt;
BEGIN
scanint;
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(curval);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
IF curlist.modefield=1 THEN
Buildpage;
END;
{996}
PROCEDURE Deleteskip;
VAR
p:halfword;
BEGIN
IF(curlist.modefield=1)AND(curlist.tailfield=curlist.headfield)
THEN
{997}
BEGIN
Youcant;
BEGIN
helpptr:=2;
helpline[1]:=802;
helpline[0]:=817;
END;
error;
END
ELSE
BEGIN
IF NOT(curlist.tailfield>10000)THEN
IF mem[curlist.
tailfield].hh.b0=10 THEN
BEGIN
p:=curlist.headfield;
WHILE mem[p].hh.rh<>curlist.tailfield DO p:=mem[p].hh.rh;
mem[p].hh.rh:=0;
flushnodelis(curlist.tailfield);
curlist.tailfield:=p;
END;
END;
END;
{999}PROCEDURE Unpackage;
VAR
p:halfword;
BEGIN
scaneightbit;
p:=eqtb[2638+curval].hh.rh;
IF p<>0 THEN
IF((Abs(curlist.modefield)=1)AND(mem[p].hh.b0=1))OR((Abs(
curlist.modefield)=93)AND(mem[p].hh.b0=0))THEN
BEGIN
mem[curlist.
tailfield].hh.rh:=mem[p+5].hh.rh;
eqtb[2638+curval].hh.rh:=0;
freenode(p,7);
WHILE mem[curlist.tailfield].hh.rh<>0 DO curlist.tailfield:=mem[curlist.
tailfield].hh.rh;
END
ELSE
BEGIN
printnl(818);
BEGIN
helpptr:=2;
helpline[1]:=819;
helpline[0]:=820;
END;
error;
END;
END;
{1002}
PROCEDURE Appenditalic;
VAR
f:internalfont;
BEGIN
IF(curlist.tailfield>10000)AND(curlist.tailfield<>curlist.
headfield)THEN
BEGIN
f:=mem[curlist.tailfield].hh.b0;
BEGIN
mem[curlist.tailfield].hh.rh:=newkern(fontinfo[italicbase[f]+
fontinfo[charbase[f]+mem[curlist.tailfield].hh.b1].qqqq.b2 DIV 4].int);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
END;
END;
{1006}
PROCEDURE Appenddiscre;
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=newdisc;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
IF curchr=1 THEN
mem[curlist.tailfield+1].hh.lh:=newcharacter(eqtb[2894]
.hh.rh,45)
ELSE
BEGIN
saveptr:=saveptr+1;
savestack[saveptr-1].int:=0;
scanleftbrac;
newsavelevel(12);
pushnest;
curlist.modefield:=-93;
END;
END;
{1008}
PROCEDURE Builddiscret;
LABEL
30,10;
VAR
p,q:halfword;
n:integer;
BEGIN
unsave;
{1010}q:=curlist.headfield;
p:=mem[q].hh.rh;
n:=0;
WHILE p<>0 DO
BEGIN
IF NOT(p>10000)THEN
IF(mem[p].hh.b0<>11)AND(mem[p].
hh.b0<>6)THEN
BEGIN
printnl(827);
begindiagnos;
showbox(p);
enddiagnosti(true);
BEGIN
helpptr:=1;
helpline[0]:=828;
END;
error;
flushnodelis(p);
mem[q].hh.rh:=0;
GOTO 30;
END;
q:=p;
p:=mem[q].hh.rh;
n:=n+1;
END;
30:;
p:=mem[curlist.headfield].hh.rh;
popnest;
CASE savestack[saveptr-1].int OF
0:mem[curlist.tailfield+1].hh.lh:=p;
1:mem[curlist.tailfield+1].hh.rh:=p;
2:{1009}BEGIN
IF(n>0)AND(Abs(curlist.modefield)=185)THEN
BEGIN
printnl(
821);
BEGIN
helpptr:=2;
helpline[1]:=822;
helpline[0]:=823;
END;
flushnodelis(p);
n:=0;
error;
END
ELSE
mem[curlist.tailfield].hh.rh:=p;
IF n<128 THEN
mem[curlist.tailfield].hh.b1:=n
ELSE
BEGIN
printnl(824);
BEGIN
helpptr:=2;
helpline[1]:=825;
helpline[0]:=826;
END;
error;
END;
IF n>0 THEN
curlist.tailfield:=q;
saveptr:=saveptr-1;
GOTO 10;
END;
END;
savestack[saveptr-1].int:=savestack[saveptr-1].int+1;
scanleftbrac;
newsavelevel(12);
pushnest;
curlist.modefield:=-93;
10:
END;
{1012}
PROCEDURE Insthe;
BEGIN
printnl(829);
BEGIN
helpptr:=3;
helpline[2]:=830;
helpline[1]:=831;
helpline[0]:=832;
END;
backerror;
mem[10011].hh.rh:=thetoks(false);
begintokenli(mem[10003].hh.rh,3);
END;
{1015}
PROCEDURE Makeaccent;
VAR
s,t:real;
p,q:halfword;
f:internalfont;
a,h,x,w,delta:scaled;
i:fourquarters;
BEGIN
scancharnum;
f:=eqtb[2894].hh.rh;
p:=newcharacter(f,curval);
IF p<>0 THEN
BEGIN
x:=fontinfo[5+parambase[f]].int;
s:=fontinfo[1+parambase[f]].int/65536.0;
a:=fontinfo[widthbase[f]+fontinfo[charbase[f]+mem[p].hh.b1].qqqq.b0].int
;
Doassignment;
{1016}q:=0;
f:=eqtb[2894].hh.rh;
IF(curcmd=11)OR(curcmd=12)THEN
q:=newcharacter(f,curchr)
ELSE
IF curcmd=
16 THEN
BEGIN
scancharnum;
q:=newcharacter(f,curval);
END
ELSE
backinput;
IF q<>0 THEN
{1017}
BEGIN
t:=fontinfo[1+parambase[f]].int/65536.0;
i:=fontinfo[charbase[f]+mem[q].hh.b1].qqqq;
w:=fontinfo[widthbase[f]+i.b0].int;
h:=fontinfo[heightbase[f]+i.b1 DIV 16].int;
IF h<>x THEN
BEGIN
p:=hpack(p,0,1);
mem[p+4].int:=x-h;
END;
delta:=Round((w-a)/2+h*t-x*s);
mem[curlist.tailfield].hh.rh:=newkern(delta);
mem[mem[curlist.tailfield].hh.rh].hh.rh:=p;
mem[p].hh.rh:=newkern(-a-delta);
curlist.tailfield:=mem[p].hh.rh;
p:=q;
END;
mem[curlist.tailfield].hh.rh:=p;
curlist.tailfield:=p;
END;
END;
{1019}
PROCEDURE Alignerror;
BEGIN
IF Abs(alignstate)>2 THEN
{1020}
BEGIN
printnl(837);
IF curtok=1062 THEN
BEGIN
BEGIN
helpptr:=6;
helpline[5]:=838;
helpline[4]:=839;
helpline[3]:=840;
helpline[2]:=841;
helpline[1]:=842;
helpline[0]:=843;
END;
END
ELSE
BEGIN
BEGIN
helpptr:=5;
helpline[4]:=838;
helpline[3]:=844;
helpline[2]:=841;
helpline[1]:=842;
helpline[0]:=843;
END;
END;
error;
curcmd:=0;
END
ELSE
BEGIN
backinput;
IF alignstate<0 THEN
BEGIN
printnl(451);
curcmd:=1;
alignstate:=alignstate+1;
curtok:=379;
END
ELSE
BEGIN
printnl(833);
curcmd:=2;
alignstate:=alignstate-1;
curtok:=637;
END;
BEGIN
helpptr:=3;
helpline[2]:=834;
helpline[1]:=835;
helpline[0]:=836;
END;
error;
END;
END;
{1021}
PROCEDURE Noalignerror;
BEGIN
printnl(845);
BEGIN
helpptr:=2;
helpline[1]:=846;
helpline[0]:=847;
END;
error;
END;
PROCEDURE Omiterror;
BEGIN
printnl(848);
BEGIN
helpptr:=2;
helpline[1]:=849;
helpline[0]:=847;
END;
error;
END;
{1024}
PROCEDURE Doendv;
BEGIN
IF curgroup=8 THEN
BEGIN
Endgraf;
unsave;
newsavelevel(8);
IF Fincol THEN
Finrow;
END
ELSE
Offsave;
END;
{1027}PROCEDURE Initmath;
LABEL
21,40,45,30,10;
VAR
w:scaled;
l:scaled;
s:scaled;
p:halfword;
q:halfword;
f:internalfont;
n:integer;
v:scaled;
d:scaled;
BEGIN{1029}
IF(fontparams[eqtb[2897].hh.rh]<22)OR(fontparams[eqtb[2913].
hh.rh]<22)OR(fontparams[eqtb[2929].hh.rh]<22)THEN
BEGIN
printnl(850);
BEGIN
helpptr:=3;
helpline[2]:=851;
helpline[1]:=852;
helpline[0]:=853;
END;
error;
GOTO 10;
END
ELSE
IF(fontparams[eqtb[2898].hh.rh]<13)OR(fontparams[eqtb[2914].hh.
rh]<13)OR(fontparams[eqtb[2930].hh.rh]<13)THEN
BEGIN
printnl(854);
BEGIN
helpptr:=3;
helpline[2]:=855;
helpline[1]:=856;
helpline[0]:=857;
END;
error;
GOTO 10;
END;
getnctoken;
IF(curcmd=3)AND(curlist.modefield>0)THEN
{1035}
BEGIN
IF curlist.headfield
=curlist.tailfield THEN
BEGIN
popnest;
w:=-1073741823;
END
ELSE
BEGIN
Linebreak(eqtb[3590].int);
{1036}v:=mem[justbox+4].int+2*fontinfo[6+parambase[eqtb[2894].hh.rh]].
int;
w:=-1073741823;
p:=mem[justbox+5].hh.rh;
WHILE p<>0 DO
BEGIN{1037}
21:
IF(p>10000)THEN
BEGIN
f:=mem[p].hh.b0;
d:=fontinfo[widthbase[f]+fontinfo[charbase[f]+mem[p].hh.b1].qqqq.b0].int
;
GOTO 40;
END;
CASE mem[p].hh.b0 OF
0,1,2:BEGIN
d:=mem[p+1].int;
GOTO 40;
END;
6:{563}BEGIN
mem[10011]:=mem[p+1];
mem[10011].hh.rh:=mem[p].hh.rh;
p:=10011;
GOTO 21;
END;
11,9:d:=mem[p+1].int;
10:{1038}BEGIN
q:=mem[p+1].hh.lh;
d:=mem[q+1].int;
IF((mem[justbox+5].hh.b0=1)AND(mem[justbox+5].hh.b1=mem[q].hh.b0))OR((
mem[justbox+5].hh.b0=2)AND(mem[justbox+5].hh.b1=mem[q].hh.b1))THEN
v:=
1073741823;
IF mem[p].hh.b1>=100 THEN
GOTO 40;
END;
8:{1239}d:=0;
OTHERS:d:=0
END;
IF v<1073741823 THEN
v:=v+d;
GOTO 45;
40:
IF v<1073741823 THEN
BEGIN
v:=v+d;
w:=v;
END
ELSE
BEGIN
w:=1073741823;
GOTO 30;
END;
45:
p:=mem[p].hh.rh;
END;
30:;
END;
{1039}
IF eqtb[2635].hh.rh=0 THEN
IF(eqtb[4023].int<>0)AND(((eqtb[3621].
int>=0)AND(curlist.alreadyfield+2>eqtb[3621].int))OR(curlist.
alreadyfield+1<-eqtb[3621].int))THEN
BEGIN
l:=eqtb[4010].int-Abs(eqtb[
4023].int);
IF eqtb[4023].int>0 THEN
s:=eqtb[4023].int
ELSE
s:=0;
END
ELSE
BEGIN
l:=eqtb[4010].int;
s:=0;
END
ELSE
BEGIN
n:=mem[eqtb[2635].hh.rh].hh.lh;
IF curlist.alreadyfield+2>=n THEN
p:=eqtb[2635].hh.rh+2*n
ELSE
p:=eqtb[
2635].hh.rh+2*(curlist.alreadyfield+2);
s:=mem[p-1].int;
l:=mem[p].int;
END;
pushnest;
curlist.modefield:=185;
curlist.auxfield:=0;
newsavelevel(16);
eqdefine(2943,101,1);
eqworddefine(4019,w);
eqworddefine(4020,l);
eqworddefine(4021,s);
IF nestptr=1 THEN
Buildpage;
END
ELSE
BEGIN
backinput;
{1028}
BEGIN
pushnest;
curlist.modefield:=-185;
curlist.auxfield:=0;
newsavelevel(16);
eqdefine(2943,101,1);
END;
END;
10:
END;
{1032}
PROCEDURE Starteqno;
BEGIN
IF curgroup=16 THEN
BEGIN
savestack[saveptr+0].int:=curchr;
saveptr:=saveptr+1;
{1028}
BEGIN
pushnest;
curlist.modefield:=-185;
curlist.auxfield:=0;
newsavelevel(16);
eqdefine(2943,101,1);
END;
END
ELSE
Offsave;
END;
{1041}
PROCEDURE Scanmath(p:halfword);
LABEL
10;
VAR
c:integer;
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
CASE curcmd OF
11,12:c:=eqtb[3072+curchr].hh.rh;
16:BEGIN
scancharnum;
c:=curval+28672;
END;
17:BEGIN
scanfifteenb;
c:=curval;
END;
15:BEGIN
scantwentyse;
c:=curval DIV 4096;
END;
OTHERS:{1042}BEGIN
backinput;
scanleftbrac;
savestack[saveptr+0].int:=p;
saveptr:=saveptr+1;
newsavelevel(11);
pushnest;
curlist.auxfield:=0;
END
END;
mem[p].hh.rh:=1;
mem[p].hh.b1:=c MOD 256;
IF c>=28672 THEN
mem[p].hh.b0:=eqtb[2943].hh.rh
ELSE
mem[p].hh.b0:=(c
DIV 256)MOD 16;
GOTO 10;
10:
END;
{1044}
PROCEDURE Setmathchar(c:integer);
VAR
p:halfword;
BEGIN
p:=newnoad;
mem[p+1].hh.rh:=1;
mem[p+1].hh.b1:=c MOD 256;
IF c>=28672 THEN
BEGIN
mem[p+1].hh.b0:=eqtb[2943].hh.rh;
mem[p].hh.b0:=15;
END
ELSE
BEGIN
mem[p+1].hh.b0:=(c DIV 256)MOD 16;
mem[p].hh.b0:=15+(c DIV 4096);
END;
mem[curlist.tailfield].hh.rh:=p;
curlist.tailfield:=p;
END;
{1048}
PROCEDURE Mathlimitswi;
LABEL
10;
BEGIN
IF curlist.headfield<>curlist.tailfield THEN
IF mem[curlist.
tailfield].hh.b0=16 THEN
BEGIN
mem[curlist.tailfield].hh.b1:=1-mem[
curlist.tailfield].hh.b1;
GOTO 10;
END;
printnl(860);
BEGIN
helpptr:=1;
helpline[0]:=861;
END;
10:
END;
{1049}
PROCEDURE Scandelimite(p:halfword;
r:boolean);
BEGIN
IF r THEN
scantwentyse
ELSE
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
CASE curcmd OF
11,12:curval:=eqtb[3878+curchr].int;
15:scantwentyse;
OTHERS:curval:=-1
END;
END;
IF curval<0 THEN
{1050}
BEGIN
printnl(862);
BEGIN
helpptr:=6;
helpline[5]:=863;
helpline[4]:=864;
helpline[3]:=865;
helpline[2]:=866;
helpline[1]:=867;
helpline[0]:=868;
END;
backerror;
curval:=0;
END;
mem[p].qqqq.b0:=(curval DIV 1048576)MOD 16;
mem[p].qqqq.b1:=(curval DIV 4096)MOD 256;
mem[p].qqqq.b2:=(curval DIV 256)MOD 16;
mem[p].qqqq.b3:=curval MOD 256;
END;
{1052}
PROCEDURE Mathradical;
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=getnode(5);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=23;
mem[curlist.tailfield].hh.b1:=0;
mem[curlist.tailfield+1].hh:=emptyfield;
mem[curlist.tailfield+3].hh:=emptyfield;
mem[curlist.tailfield+2].hh:=emptyfield;
Scandelimite(curlist.tailfield+4,true);
Scanmath(curlist.tailfield+1);
END;
{1054}PROCEDURE Mathac;
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=getnode(5);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=27;
mem[curlist.tailfield].hh.b1:=0;
mem[curlist.tailfield+1].hh:=emptyfield;
mem[curlist.tailfield+3].hh:=emptyfield;
mem[curlist.tailfield+2].hh:=emptyfield;
mem[curlist.tailfield+4].hh.rh:=1;
scanfifteenb;
mem[curlist.tailfield+4].hh.b1:=curval MOD 256;
IF curval>=28672 THEN
mem[curlist.tailfield+4].hh.b0:=eqtb[2943].hh.rh
ELSE
mem[curlist.tailfield+4].hh.b0:=(curval DIV 256)MOD 16;
Scanmath(curlist.tailfield+1);
END;
{1060}
PROCEDURE Mathnonscrip;
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF(curcmd>30)OR(curcmd<26)THEN
BEGIN
printnl(869);
BEGIN
helpptr:=2;
helpline[1]:=870;
helpline[0]:=871;
END;
backerror;
END
ELSE
BEGIN
backinput;
BEGIN
mem[curlist.tailfield].hh.rh:=newglue(0);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b1:=98;
END;
END;
{1062}
PROCEDURE Subsup;
VAR
t:smallnumber;
p:halfword;
BEGIN
t:=0;
p:=0;
IF curlist.tailfield<>curlist.headfield THEN
IF(mem[curlist.tailfield].
hh.b0>=15)AND(mem[curlist.tailfield].hh.b0<29)THEN
BEGIN
p:=curlist.
tailfield+2+curcmd-7;
t:=mem[p].hh.rh;
END;
IF(p=0)OR(t<>0)THEN
{1063}
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=
newnoad;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=15;
p:=curlist.tailfield+2+curcmd-7;
IF t<>0 THEN
BEGIN
IF curcmd=7 THEN
BEGIN
printnl(872);
BEGIN
helpptr:=1;
helpline[0]:=873;
END;
END
ELSE
BEGIN
printnl(874);
BEGIN
helpptr:=1;
helpline[0]:=875;
END;
END;
error;
END;
END;
Scanmath(p);
END;
{1067}
PROCEDURE Mathfraction;
VAR
c:smallnumber;
BEGIN
c:=curchr;
IF curlist.auxfield<>0 THEN
{1069}
BEGIN
IF c MOD 3=0 THEN
scandimen(false
,false,false);
IF c>=3 THEN
BEGIN
Scandelimite(10011,false);
Scandelimite(10011,false);
END;
printnl(881);
BEGIN
helpptr:=3;
helpline[2]:=882;
helpline[1]:=883;
helpline[0]:=884;
END;
error;
END
ELSE
BEGIN
curlist.auxfield:=getnode(6);
mem[curlist.auxfield].hh.b0:=24;
mem[curlist.auxfield].hh.b1:=0;
mem[curlist.auxfield+2].hh.rh:=3;
mem[curlist.auxfield+2].hh.lh:=mem[curlist.headfield].hh.rh;
mem[curlist.auxfield+3].hh:=emptyfield;
mem[curlist.auxfield+4].qqqq:=nullcharacte;
mem[curlist.auxfield+5].qqqq:=nullcharacte;
mem[curlist.headfield].hh.rh:=0;
curlist.tailfield:=curlist.headfield;
{1068}
CASE c MOD 3 OF
0:BEGIN
scandimen(false,false,false);
mem[curlist.auxfield+1].int:=curval;
END;
1:mem[curlist.auxfield+1].int:=1073741824;
2:mem[curlist.auxfield+1].int:=0;
END;
IF c>=3 THEN
BEGIN
Scandelimite(curlist.auxfield+4,false);
Scandelimite(curlist.auxfield+5,false);
END;
END;
END;
{1070}
FUNCTION Finmlist(p:halfword):halfword;
VAR
q:halfword;
BEGIN
IF curlist.auxfield<>0 THEN
{1071}
BEGIN
mem[curlist.auxfield+3].hh.
rh:=3;
mem[curlist.auxfield+3].hh.lh:=mem[curlist.headfield].hh.rh;
IF p=0 THEN
q:=curlist.auxfield
ELSE
BEGIN
q:=mem[curlist.auxfield+2].hh
.lh;
IF mem[q].hh.b0<>29 THEN
confusion(630);
mem[curlist.auxfield+2].hh.lh:=mem[q].hh.rh;
mem[q].hh.rh:=curlist.auxfield;
mem[curlist.auxfield].hh.rh:=p;
END;
END
ELSE
BEGIN
mem[curlist.tailfield].hh.rh:=p;
q:=mem[curlist.headfield].hh.rh;
END;
popnest;
Finmlist:=q;
END;
{1076}
PROCEDURE Mathleftrigh;
VAR
t:smallnumber;
p:halfword;
BEGIN
t:=curchr;
IF(t=30)AND(curgroup<>17)THEN
{1077}
BEGIN
IF curgroup=16 THEN
BEGIN
Scandelimite(10011,false);
printnl(885);
BEGIN
helpptr:=1;
helpline[0]:=886;
END;
error;
END
ELSE
Offsave;
END
ELSE
BEGIN
p:=newnoad;
mem[p].hh.b0:=t;
Scandelimite(p+1,false);
IF t=29 THEN
BEGIN
pushnest;
newsavelevel(17);
mem[curlist.headfield].hh.rh:=p;
curlist.tailfield:=p;
END
ELSE
BEGIN
p:=Finmlist(p);
unsave;
BEGIN
mem[curlist.tailfield].hh.rh:=newnoad;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield+1].hh.rh:=3;
mem[curlist.tailfield+1].hh.lh:=p;
END;
END;
END;
{1079}
PROCEDURE Finmath;
VAR
l:boolean;
m:integer;
p:halfword;
a:halfword;
{1082}b:halfword;
w:scaled;
z:scaled;
e:scaled;
q:scaled;
d:scaled;
s:scaled;
g1,g2:smallnumber;
r:halfword;
BEGIN
m:=curlist.modefield;
l:=false;
p:=Finmlist(0);
IF curlist.modefield=-m THEN
BEGIN
curmlist:=p;
curstyle:=2;
mlistpenalti:=false;
mlisttohlist;
a:=hpack(mem[10003].hh.rh,0,1);
unsave;
saveptr:=saveptr-1;
IF savestack[saveptr+0].int=1 THEN
l:=true;
m:=curlist.modefield;
p:=Finmlist(0);
END
ELSE
a:=0;
IF m<0 THEN
{1080}
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=newmath(eqtb[
4007].int,0);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
curmlist:=p;
curstyle:=2;
mlistpenalti:=true;
mlisttohlist;
mem[curlist.tailfield].hh.rh:=mem[10003].hh.rh;
WHILE mem[curlist.tailfield].hh.rh<>0 DO curlist.tailfield:=mem[curlist.
tailfield].hh.rh;
BEGIN
mem[curlist.tailfield].hh.rh:=newmath(eqtb[4007].int,1);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
curlist.auxfield:=1000;
unsave;
END
ELSE
BEGIN{1081}
BEGIN
getnctoken;
IF curcmd<>3 THEN
BEGIN
printnl(887);
BEGIN
helpptr:=2;
helpline[1]:=888;
helpline[0]:=889;
END;
backerror;
END;
END;
{1083}curmlist:=p;
curstyle:=0;
mlistpenalti:=false;
mlisttohlist;
{1085}
IF eqtb[2369].hh.rh<>0 THEN
BEGIN
p:=10003;
WHILE mem[p].hh.rh<>0 DO p:=mem[p].hh.rh;
mem[p].hh.rh:=newparamglue(7);
END;
IF eqtb[2368].hh.rh=0 THEN
p:=mem[10003].hh.rh
ELSE
BEGIN
p:=
newparamglue(6);
mem[p].hh.rh:=mem[10003].hh.rh;
END;
b:=hpack(p,0,1);
w:=mem[b+1].int;
z:=eqtb[4020].int;
s:=eqtb[4021].int;
IF a=0 THEN
BEGIN
e:=0;
q:=0;
END
ELSE
BEGIN
e:=mem[a+1].int;
q:=e+fontinfo[6+parambase[eqtb[2897].hh.rh]].int;
END;
IF w+q>z THEN
{1086}
BEGIN
IF(e<>0)AND((w-totalshrink[0]+q<=z)OR(
totalshrink[1]<>0)OR(totalshrink[2]<>0)OR(totalshrink[3]<>0))THEN
BEGIN
freenode(b,7);
b:=hpack(p,z-q,0);
END
ELSE
BEGIN
e:=0;
IF w>z THEN
BEGIN
freenode(b,7);
b:=hpack(p,z,0);
END;
END;
w:=mem[b+1].int;
END;
{1087}d:=half(z-w);
IF(e>0)AND(d<2*e)THEN
BEGIN
d:=half(z-w-e);
IF p<>0 THEN
IF mem[p].hh.b0=10 THEN
d:=0;
END;
{1088}
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(eqtb[3594].int);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
IF(d+s<=eqtb[4019].int)OR l THEN
BEGIN
g1:=3;
g2:=3;
END
ELSE
BEGIN
g1:=4;
g2:=5;
END;
IF l AND(e=0)THEN
BEGIN
mem[a+4].int:=s;
appendtovlis(a);
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(10000);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
END
ELSE
BEGIN
mem[curlist.tailfield].hh.rh:=newparamglue(g1);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
{1089}
IF e<>0 THEN
BEGIN
r:=newkern(z-w-e-d);
IF l THEN
BEGIN
mem[a].hh.rh:=r;
mem[r].hh.rh:=b;
b:=a;
d:=0;
END
ELSE
BEGIN
mem[b].hh.rh:=r;
mem[r].hh.rh:=a;
END;
END;
mem[b+4].int:=s+d;
appendtovlis(b);
{1090}
IF(a<>0)AND(e=0)AND NOT l THEN
BEGIN
BEGIN
mem[curlist.tailfield].
hh.rh:=newpenalty(10000);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[a+4].int:=s+z-mem[a+1].int;
appendtovlis(a);
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(eqtb[3595].int);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
END
ELSE
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=newpenalty(eqtb[3595]
.int);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
BEGIN
mem[curlist.tailfield].hh.rh:=newparamglue(g2);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
END;
Resumeafterd;
END;
END;
{1084}PROCEDURE Resumeafterd;
BEGIN
IF curgroup<>16 THEN
confusion(890);
unsave;
curlist.alreadyfield:=curlist.alreadyfield+3;
pushnest;
curlist.modefield:=93;
curlist.auxfield:=1000;
{369}
BEGIN
getnctoken;
IF curcmd<>10 THEN
backinput;
END;
IF nestptr=1 THEN
Buildpage;
END;
{1096}
PROCEDURE Conditional;
LABEL
10;
VAR
b:boolean;
r:60..62;
n:integer;
c:1..2;
p,q:halfword;
BEGIN
CASE curchr OF
0:{1100}BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF(curtok>=3328)OR(curcmd=9)THEN
n:=256
ELSE
BEGIN
n:=curchr;
{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF(curtok>=3328)OR(curcmd=9)THEN
n:=256;
END;
IF n<256 THEN
b:=(n=curchr)
ELSE
BEGIN
printnl(904);
BEGIN
helpptr:=2;
helpline[1]:=905;
helpline[0]:=906;
END;
backerror;
GOTO 10;
END;
END;
1,2:{1097}BEGIN
c:=curchr;
IF c=1 THEN
scanint
ELSE
scandimen(false,false,false);
n:=curval;
{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF(curtok>=3132)AND(curtok<=3134)THEN
r:=curtok-3072
ELSE
BEGIN
printnl(
902);
printcmdchr(55,c);
BEGIN
helpptr:=1;
helpline[0]:=903;
END;
backerror;
r:=61;
END;
IF c=1 THEN
scanint
ELSE
scandimen(false,false,false);
CASE r OF
60:b:=(n<curval);
61:b:=(n=curval);
62:b:=(n>curval);
END;
END;
3:{1098}BEGIN
scaneightbit;
b:=NOT Odd(eqtb[3622+curval].int);
END;
4:b:=(Abs(curlist.modefield)=1);
5:b:=(Abs(curlist.modefield)=93);
6:b:=(Abs(curlist.modefield)=185);
7:b:=(curlist.modefield<0);
8:{1099}BEGIN
scaneightbit;
b:=(eqtb[2638+curval].hh.rh=0);
END;
9:{1101}BEGIN
gettoken;
n:=csptr;
IF n<>0 THEN
gettoken;
IF csptr<>0 THEN
BEGIN
IF curcmd<>eqtb[n].hh.b0 THEN
b:=false
ELSE
IF
curcmd<94 THEN
b:=(curchr=eqtb[n].hh.rh)
ELSE
{1102}
BEGIN
p:=mem[curcmd].
hh.rh;
q:=mem[eqtb[n].hh.rh].hh.rh;
WHILE(p<>0)AND(q<>0)DO
IF mem[p].hh.lh<>mem[q].hh.lh THEN
p:=0
ELSE
BEGIN
p:=mem[p].hh.rh;
q:=mem[q].hh.rh;
END;
b:=((p=0)AND(q=0));
END;
END
ELSE
BEGIN
printnl(907);
BEGIN
helpptr:=2;
helpline[1]:=908;
helpline[0]:=906;
END;
backerror;
GOTO 10;
END;
END;
END;
{1103}
IF b THEN
BEGIN
scanleftbrac;
newsavelevel(5);
curlevel:=curlevel-1;
END
ELSE
BEGIN
passblock(0);
{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF curcmd=57 THEN
BEGIN
scanleftbrac;
newsavelevel(6);
curlevel:=curlevel-1;
END
ELSE
BEGIN
printnl(909);
BEGIN
helpptr:=3;
helpline[2]:=910;
helpline[1]:=911;
helpline[0]:=912;
END;
backerror;
END;
END;
10:
END;
{1106}
PROCEDURE Spuriouselse;
BEGIN
printnl(914);
BEGIN
helpptr:=2;
helpline[1]:=915;
helpline[0]:=916;
END;
error;
END;
{1107}
PROCEDURE Caseconditio;
LABEL
10,30;
VAR
n:integer;
BEGIN
scanint;
n:=curval;
WHILE n<>0 DO
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF curcmd<>1 THEN
IF curcmd=57 THEN
GOTO 30
ELSE
{1109}
BEGIN
printnl(917)
;
BEGIN
helpptr:=3;
helpline[2]:=918;
helpline[1]:=919;
helpline[0]:=912;
END;
backerror;
GOTO 10;
END;
passblock(1);
n:=n-1;
END;
30:
scanleftbrac;
IF n=0 THEN
newsavelevel(7)
ELSE
newsavelevel(6);
curlevel:=curlevel-1;
10:
END;
{1113}{1146}
PROCEDURE Newfont;
LABEL
10;
VAR
u:0..badfontcode;
s:scaled;
n:strnumber;
f:internalfont;
BEGIN
IF jobname=0 THEN
openlogfile;
scanint;
IF(curval<0)OR(curval>=badfontcode)THEN
BEGIN
printnl(948);
printint(curval);
print(949);
printint(badfontcode-1);
BEGIN
helpptr:=1;
helpline[0]:=951;
END;
error;
curval:=0;
END;
u:=curval;
scanoptional;
scanfilename;
{1147}
IF scankeyword(981)THEN
BEGIN
scandimen(false,false,false);
s:=curval;
IF(s<=0)OR(s>=134217728)THEN
BEGIN
printnl(982);
printscaled(s);
print(983);
BEGIN
helpptr:=2;
helpline[1]:=984;
helpline[0]:=985;
END;
error;
s:=10*65536;
END;
END
ELSE
s:=0;
{1148}
IF fontnumber[u]<>0 THEN
BEGIN
f:=fontnumber[u];
IF((s=0)AND(fontsize[f]<>fontdsize[f]))OR((s<>0)AND(s<>fontsize[f]))OR
NOT streqstr(fontname[f],curname)OR NOT streqstr(fontarea[f],curarea)
THEN
{1149}
BEGIN
printnl(561);
printint(u);
print(986);
print(fontname[f]);
IF fontsize[f]<>fontdsize[f]THEN
BEGIN
print(562);
printscaled(fontsize[f]);
print(497);
END;
BEGIN
helpptr:=2;
helpline[1]:=987;
helpline[0]:=988;
END;
error;
END;
GOTO 10;
END;
{1150}
FOR f:=1 TO fontptr DO
IF streqstr(fontname[f],curname)AND
streqstr(fontarea[f],curarea)AND((s=0)AND(fontsize[f]=fontdsize[f]))OR((
s<>0)AND(s=fontsize[f]))THEN
BEGIN
fontnumber[u]:=f;
fontcode[f]:=u;
GOTO 10;
END;
readfontinfo(u,curname,curarea,s);
10:
END;
{1154}
PROCEDURE Newinteracti;
BEGIN
println;
interaction:=curchr;
{72}
IF interaction=0 THEN
selector:=16
ELSE
selector:=17;
IF jobname<>0 THEN
selector:=selector+2;
END;
{1133}
PROCEDURE Doregisterco(a:smallnumber);
LABEL
10;
VAR
p,q,r:halfword;
n:eightbits;
BEGIN
p:=curchr;
q:=curcmd;
scaneightbit;
n:=curval;
IF q=84 THEN
scanoptional
ELSE
{1134}
IF NOT scankeyword(974)THEN
BEGIN
printnl(975);
BEGIN
helpptr:=2;
helpline[1]:=976;
helpline[0]:=977;
END;
error;
GOTO 10;
END;
aritherror:=false;
IF q<86 THEN
{1135}
CASE p OF
0:BEGIN
scanint;
IF q=85 THEN
curval:=curval+eqtb[3622+n].int;
END;
1:BEGIN
scandimen(false,false,false);
IF q=85 THEN
curval:=curval+eqtb[4024+n].int;
END;
2:BEGIN
scanglue(false);
IF q=85 THEN
{1136}
BEGIN
q:=newspec(curval);
r:=eqtb[2379+n].hh.rh;
deletegluere(curval);
mem[q+1].int:=mem[q+1].int+mem[r+1].int;
IF mem[q+2].int=0 THEN
mem[q].hh.b0:=0;
IF mem[q].hh.b0=mem[r].hh.b0 THEN
mem[q+2].int:=mem[q+2].int+mem[r+2].
int
ELSE
IF(mem[q].hh.b0<mem[r].hh.b0)AND(mem[r+2].int<>0)THEN
BEGIN
mem
[q+2].int:=mem[r+2].int;
mem[q].hh.b0:=mem[r].hh.b0;
END;
IF mem[q+3].int=0 THEN
mem[q].hh.b1:=0;
IF mem[q].hh.b1=mem[r].hh.b1 THEN
mem[q+3].int:=mem[q+3].int+mem[r+3].
int
ELSE
IF(mem[q].hh.b1<mem[r].hh.b1)AND(mem[r+3].int<>0)THEN
BEGIN
mem
[q+3].int:=mem[r+3].int;
mem[q].hh.b1:=mem[r].hh.b1;
END;
curval:=q;
END;
END;
END
ELSE
{1137}
BEGIN
scanint;
CASE p OF
0:IF q=86 THEN
curval:=nxplusy(eqtb[3622+n].int,curval,0)
ELSE
curval:=xovern(eqtb[3622+n].int,curval);
1:IF q=86 THEN
curval:=nxplusy(eqtb[4024+n].int,curval,0)
ELSE
curval:=
xovern(eqtb[4024+n].int,curval);
2:BEGIN
r:=newspec(eqtb[2379+n].hh.rh);
IF q=86 THEN
BEGIN
mem[r+1].int:=nxplusy(mem[eqtb[2379+n].hh.rh+1].int,
curval,0);
mem[r+2].int:=nxplusy(mem[eqtb[2379+n].hh.rh+2].int,curval,0);
mem[r+3].int:=nxplusy(mem[eqtb[2379+n].hh.rh+3].int,curval,0);
END
ELSE
BEGIN
mem[r+1].int:=xovern(mem[eqtb[2379+n].hh.rh+1].int,curval
);
mem[r+2].int:=xovern(mem[eqtb[2379+n].hh.rh+2].int,curval);
mem[r+3].int:=xovern(mem[eqtb[2379+n].hh.rh+3].int,curval);
END;
curval:=r;
END;
END;
END;
IF aritherror THEN
BEGIN
printnl(971);
BEGIN
helpptr:=2;
helpline[1]:=972;
helpline[0]:=973;
END;
error;
GOTO 10;
END;
CASE p OF
0:IF(a>=4)THEN
geqworddefin(3622+n,curval)
ELSE
eqworddefine(
3622+n,curval);
1:IF(a>=4)THEN
geqworddefin(4024+n,curval)
ELSE
eqworddefine(4024+n,
curval);
2:IF(a>=4)THEN
geqdefine(2379+n,98,curval)
ELSE
eqdefine(2379+n,98,curval
);
END;
10:
END;
PROCEDURE Prefixedcomm;
LABEL
10;
VAR
a:smallnumber;
j:halfword;
k:0..fontmemsize;
p,q,r:halfword;
n:integer;
e:boolean;
BEGIN
a:=0;
WHILE curcmd=80 DO
BEGIN
IF NOT Odd(a DIV curchr)THEN
a:=a+curchr;
{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF curcmd<=69 THEN
{1114}
BEGIN
printnl(928);
printcmdchr(curcmd,curchr);
printchar(39);
BEGIN
helpptr:=1;
helpline[0]:=929;
END;
backerror;
GOTO 10;
END;
END;
{1115}
IF(curcmd<>82)AND(a MOD 4<>0)THEN
BEGIN
printnl(930);
printcmdchr(curcmd,curchr);
printchar(39);
BEGIN
helpptr:=1;
helpline[0]:=931;
END;
error;
END;
CASE curcmd OF
{1117}78:BEGIN
scanfontnumb;
IF(a>=4)THEN
geqdefine(2894,101,curval)
ELSE
eqdefine(2894,101,curval);
END;
79:BEGIN
scanfourbiti;
IF(a>=4)THEN
geqdefine(2943,101,curval)
ELSE
eqdefine(2943,101,curval);
END;
{1118}82:BEGIN
IF Odd(curchr)AND NOT(a>=4)THEN
a:=a+4;
e:=(curchr>=2);
gettoken;
IF curtok<4096 THEN
{1119}
BEGIN
printnl(932);
BEGIN
helpptr:=4;
helpline[3]:=933;
helpline[2]:=934;
helpline[1]:=935;
helpline[0]:=936;
END;
backerror;
END
ELSE
BEGIN
p:=csptr;
q:=scantoks(true,e);
IF(a>=4)THEN
geqdefine(p,94+(a MOD 4),defref)
ELSE
eqdefine(p,94+(a MOD 4
),defref);
END;
END;
{1120}81:BEGIN
e:=true;
{1121}gettoken;
IF csptr<>0 THEN
BEGIN
p:=csptr;
REPEAT
gettoken;
UNTIL(curcmd<>10)AND(curtok<>3133);
IF curtok>=4096 THEN
BEGIN
e:=false;
IF curcmd>=94 THEN
mem[curchr].hh.lh:=mem[curchr].hh.lh+1;
IF(a>=4)THEN
geqdefine(p,curcmd,curchr)
ELSE
eqdefine(p,curcmd,curchr);
END;
END;
IF e THEN
BEGIN
printnl(937);
BEGIN
helpptr:=2;
helpline[1]:=938;
helpline[0]:=939;
END;
backerror;
END;
END;
{1122}70:BEGIN
q:=csptr;
p:=curchr;
scanoptional;
csptr:=q;
q:=scantoks(false,false);
IF mem[defref].hh.rh=0 THEN
BEGIN
IF(a>=4)THEN
geqdefine(p,92,0)
ELSE
eqdefine(p,92,0);
BEGIN
mem[defref].hh.rh:=avail;
avail:=defref;
dynused:=dynused-1;
END;
END
ELSE
BEGIN
IF p=2636 THEN
BEGIN
mem[q].hh.rh:=getavail;
q:=mem[q].hh.rh;
mem[q].hh.lh:=637;
q:=getavail;
mem[q].hh.lh:=379;
mem[q].hh.rh:=mem[defref].hh.rh;
mem[defref].hh.rh:=q;
END;
IF(a>=4)THEN
geqdefine(p,94,defref)
ELSE
eqdefine(p,94,defref);
END;
END;
{1123}71:BEGIN
p:=curchr;
scanoptional;
scanint;
IF(a>=4)THEN
geqworddefin(3584+p,curval)
ELSE
eqworddefine(3584+p,curval)
;
END;
72:BEGIN
p:=curchr;
scanoptional;
scandimen(false,false,false);
IF(a>=4)THEN
geqworddefin(4006+p,curval)
ELSE
eqworddefine(4006+p,curval)
;
END;
73:BEGIN
p:=curchr;
scanoptional;
scanglue(p>=14);
IF(mem[curval+1].int=0)AND(mem[curval+2].int=0)AND(mem[curval+3].int=0)
THEN
BEGIN
mem[0].hh.rh:=mem[0].hh.rh+1;
deletegluere(curval);
curval:=0;
END;
IF(a>=4)THEN
geqdefine(2362+p,98,curval)
ELSE
eqdefine(2362+p,98,curval);
END;
{1124}75:BEGIN
scanoptional;
scandimen(false,false,false);
IF(a>=4)THEN
geqworddefin(4023,curval)
ELSE
eqworddefine(4023,curval);
n:=1;
IF scankeyword(940)THEN
BEGIN
scanint;
n:=curval;
END
ELSE
IF scankeyword(941)THEN
BEGIN
scanint;
n:=-curval;
IF n=0 THEN
eqtb[4023].int:=0;
END
ELSE
n:=1;
IF(a>=4)THEN
geqworddefin(3621,n)
ELSE
eqworddefine(3621,n);
END;
{1127}76:BEGIN{1128}
IF curchr=2944 THEN
n:=15
ELSE
IF curchr=3072 THEN
n
:=32767
ELSE
IF curchr=3456 THEN
n:=65536
ELSE
IF curchr=3878 THEN
n:=
16777215
ELSE
n:=127;
p:=curchr;
scansevenbit;
p:=p+curval;
scanoptional;
scanint;
IF((curval<0)AND(p<3878))OR(curval>n)THEN
BEGIN
printnl(948);
printint(curval);
IF p<3878 THEN
print(949)
ELSE
print(950);
printint(n);
BEGIN
helpptr:=1;
helpline[0]:=951;
END;
error;
curval:=0;
END;
IF p<3878 THEN
IF(a>=4)THEN
geqdefine(p,101,curval)
ELSE
eqdefine(p,101,
curval)
ELSE
IF(a>=4)THEN
geqworddefin(p,curval)
ELSE
eqworddefine(p,
curval);
END;
{1129}77:BEGIN
p:=curchr;
scanfourbiti;
p:=p+curval;
scanoptional;
scanint;
IF(curval>=badfontcode)OR(curval<0)THEN
n:=0
ELSE
n:=fontnumber[curval];
IF n=0 THEN
BEGIN
printnl(952);
printint(curval);
print(953);
BEGIN
helpptr:=1;
helpline[0]:=954;
END;
error;
END
ELSE
IF(a>=4)THEN
geqdefine(p,101,n)
ELSE
eqdefine(p,101,n);
END;
{1132}84,85,86,87:Doregisterco(a);
{1138}88:BEGIN
scaneightbit;
IF(a>=4)THEN
savestack[saveptr+0].int:=1073742080+curval
ELSE
savestack[
saveptr+0].int:=1073741824+curval;
scanoptional;
Scanbox;
END;
{1139}89:BEGIN
scanint;
n:=curval;
IF n<=0 THEN
p:=0
ELSE
BEGIN
p:=getnode(2*n+1);
mem[p].hh.lh:=n;
FOR j:=1 TO n DO
BEGIN
scandimen(false,false,false);
mem[p+2*j-1].int:=curval;
scandimen(false,false,false);
mem[p+2*j].int:=curval;
END;
END;
IF(a>=4)THEN
geqdefine(2635,99,p)
ELSE
eqdefine(2635,99,p);
END;
{1143}90:IF curchr=1 THEN
BEGIN
Newpatterns;
GOTO 10;
printnl(980);
helpptr:=0;
error;
END
ELSE
Newhyphexcep;
{1144}74:BEGIN
scantexinfo(true);
k:=curval;
scanoptional;
scandimen(false,false,false);
fontinfo[k].int:=curval;
END;
{1145}83:Newfont;
{1153}91:Newinteracti;
OTHERS:confusion(927)
END;
10:
END;
{1155}PROCEDURE Doassignment;
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
WHILE curcmd>69 DO
BEGIN
Prefixedcomm;
{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
END;
END;
{1159}
PROCEDURE Issuemessage;
VAR
oldsetting:0..21;
c:0..1;
s:strnumber;
BEGIN
c:=curchr;
mem[10011].hh.rh:=scantoks(false,true);
oldsetting:=selector;
selector:=21;
tokenshow(defref);
selector:=oldsetting;
flushlist(defref);
BEGIN
IF poolptr+1>poolsize THEN
overflow(129,poolsize);
END;
s:=makestring;
IF c=0 THEN
{1160}
BEGIN
IF termoffset+(strstart[s+1]-strstart[s])>=
maxprintline-1 THEN
println
ELSE
IF termoffset>0 THEN
printchar(32);
print(s);
Break(termout);
END
ELSE
{1163}
BEGIN
printnl(639);
print(s);
IF errhelpseen THEN
BEGIN
helpptr:=1;
helpline[0]:=995;
END
ELSE
BEGIN
helpptr:=4;
helpline[3]:=996;
helpline[2]:=997;
helpline[1]:=998;
helpline[0]:=999;
END;
error;
IF interaction<3 THEN
errhelpseen:=true;
END;
BEGIN
strptr:=strptr-1;
poolptr:=strstart[strptr];
END;
END;
{1167}
PROCEDURE Shiftcase;
VAR
b:halfword;
p:halfword;
t:halfword;
c:eightbits;
BEGIN
b:=curchr;
p:=scantoks(false,false);
p:=mem[defref].hh.rh;
WHILE p<>0 DO
BEGIN{1168}
t:=mem[p].hh.lh;
IF(t<3328)AND(t>=2816)THEN
BEGIN
c:=t MOD 256;
IF c<128 THEN
IF eqtb[b+c].hh.rh<>0 THEN
mem[p].hh.lh:=256*(t DIV 256)+
eqtb[b+c].hh.rh;
END;
p:=mem[p].hh.rh;
END;
begintokenli(mem[defref].hh.rh,3);
BEGIN
mem[defref].hh.rh:=avail;
avail:=defref;
dynused:=dynused-1;
END;
END;
{1172}
PROCEDURE Showwhatever;
VAR
p:halfword;
BEGIN
CASE curchr OF
0:{1173}BEGIN
gettoken;
IF csptr=0 THEN
BEGIN
printnl(1011);
BEGIN
helpptr:=1;
helpline[0]:=1012;
END;
backerror;
END
ELSE
BEGIN
printnl(1013);
sprintcs(csptr);
printchar(61);
printcmdchr(curcmd,curchr);
IF curcmd>=94 THEN
tokenshow(curchr)
ELSE
IF curcmd=93 THEN
tokenshow(
curmark[curchr]);
IF interaction<3 THEN
BEGIN
helpptr:=0;
errorcount:=errorcount-1;
END
ELSE
IF eqtb[3612].int<>0 THEN
BEGIN
BEGIN
helpptr:=3;
helpline[2]:=1006;
helpline[1]:=1007;
helpline[0]:=1008;
END;
END
ELSE
BEGIN
BEGIN
helpptr:=5;
helpline[4]:=1006;
helpline[3]:=1007;
helpline[2]:=1008;
helpline[1]:=1009;
helpline[0]:=1010;
END;
END;
error;
END;
END;
1:{1175}BEGIN
scaneightbit;
begindiagnos;
printnl(1019);
printint(curval);
printchar(61);
IF eqtb[2638+curval].hh.rh=0 THEN
print(1020)
ELSE
showbox(eqtb[2638+
curval].hh.rh);
enddiagnosti(true);
printnl(1021);
IF interaction<3 THEN
BEGIN
helpptr:=0;
errorcount:=errorcount-1;
END
ELSE
IF eqtb[3612].int<>0 THEN
BEGIN
BEGIN
helpptr:=3;
helpline[2]:=1006;
helpline[1]:=1007;
helpline[0]:=1008;
END;
END
ELSE
BEGIN
BEGIN
helpptr:=5;
helpline[4]:=1006;
helpline[3]:=1007;
helpline[2]:=1008;
helpline[1]:=1009;
helpline[0]:=1010;
END;
END;
error;
END;
2:{1176}BEGIN
p:=thetoks(false);
printnl(1013);
tokenshow(10003);
flushlist(mem[10003].hh.rh);
IF interaction<3 THEN
BEGIN
helpptr:=0;
errorcount:=errorcount-1;
END
ELSE
IF eqtb[3612].int<>0 THEN
BEGIN
BEGIN
helpptr:=3;
helpline[2]:=1006;
helpline[1]:=1007;
helpline[0]:=1008;
END;
END
ELSE
BEGIN
BEGIN
helpptr:=5;
helpline[4]:=1006;
helpline[3]:=1007;
helpline[2]:=1008;
helpline[1]:=1009;
helpline[0]:=1010;
END;
END;
error;
END;
OTHERS:{1177}BEGIN
begindiagnos;
showactiviti;
enddiagnosti(true);
printnl(1021);
IF interaction<3 THEN
BEGIN
helpptr:=0;
errorcount:=errorcount-1;
END
ELSE
IF eqtb[3612].int<>0 THEN
BEGIN
BEGIN
helpptr:=3;
helpline[2]:=1006;
helpline[1]:=1007;
helpline[0]:=1008;
END;
END
ELSE
BEGIN
BEGIN
helpptr:=5;
helpline[4]:=1006;
helpline[3]:=1007;
helpline[2]:=1008;
helpline[1]:=1009;
helpline[0]:=1010;
END;
END;
error;
END
END;
END;
{1181}PROCEDURE Storefmtfile;
LABEL
41,42,31,32;
VAR
j,k,l:integer;
p,q:halfword;
x:integer;
w:fourquarters;
BEGIN{1183}
IF saveptr<>0 THEN
BEGIN
printnl(1023);
BEGIN
helpptr:=1;
helpline[0]:=1024;
END;
BEGIN
IF interaction=3 THEN
interaction:=2;
error;
IF interaction>0 THEN
debughelp;
quit;
END;
END;
{1207}selector:=21;
print(1034);
print(jobname);
printchar(32);
printint(Abs(eqtb[3606].int)MOD 100);
printchar(46);
printint(eqtb[3605].int);
printchar(46);
printint(eqtb[3604].int);
printchar(41);
IF interaction=0 THEN
selector:=18
ELSE
selector:=19;
BEGIN
IF poolptr+1>poolsize THEN
overflow(129,poolsize);
END;
formatident:=makestring;
packjobname(1035);
WHILE NOT wopenout(fmtfile)DO promptfilena(1036,1035);
printnl(1037);
print(wmakenamestr(fmtfile));
BEGIN
strptr:=strptr-1;
poolptr:=strstart[strptr];
END;
print(formatident);
{1186}
BEGIN
fmtfile↑.int:=404035012;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=10000;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=4279;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=1777;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=307;
Put(fmtfile);
END;
{1188}
BEGIN
fmtfile↑.int:=poolptr;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=strptr;
Put(fmtfile);
END;
FOR k:=0 TO strptr DO
BEGIN
fmtfile↑.int:=strstart[k];
Put(fmtfile);
END;
k:=0;
WHILE k+4<poolptr DO
BEGIN
w.b0:=strpool[k];
w.b1:=strpool[k+1];
w.b2:=strpool[k+2];
w.b3:=strpool[k+3];
BEGIN
fmtfile↑.qqqq:=w;
Put(fmtfile);
END;
k:=k+4;
END;
k:=poolptr-4;
w.b0:=strpool[k];
w.b1:=strpool[k+1];
w.b2:=strpool[k+2];
w.b3:=strpool[k+3];
BEGIN
fmtfile↑.qqqq:=w;
Put(fmtfile);
END;
println;
printint(strptr);
print(1025);
printint(poolptr);
{1190}sortavail;
varused:=0;
BEGIN
fmtfile↑.int:=rover;
Put(fmtfile);
END;
p:=0;
q:=rover;
x:=0;
REPEAT
FOR k:=p TO q+1 DO
BEGIN
fmtfile↑:=mem[k];
Put(fmtfile);
END;
x:=x+q+2-p;
varused:=varused+q-p;
p:=q+mem[q].hh.lh;
q:=mem[q+1].hh.rh;
UNTIL q=rover;
varused:=varused+10000-p;
dynused:=memend-9999;
BEGIN
fmtfile↑.int:=memend;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=avail;
Put(fmtfile);
END;
FOR k:=p TO memend DO
BEGIN
fmtfile↑:=mem[k];
Put(fmtfile);
END;
x:=x+memend+1-p;
p:=avail;
WHILE p<>0 DO
BEGIN
dynused:=dynused-1;
p:=mem[p].hh.rh;
END;
BEGIN
fmtfile↑.int:=varused;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=dynused;
Put(fmtfile);
END;
println;
printint(x);
print(1026);
printint(varused);
printchar(38);
printint(dynused);
{1192}{1194}k:=1;
REPEAT
j:=k;
WHILE j<3583 DO
BEGIN
IF(eqtb[j].hh.rh=eqtb[j+1].hh.rh)AND(eqtb[j].hh.b0
=eqtb[j+1].hh.b0)AND(eqtb[j].hh.b1=eqtb[j+1].hh.b1)THEN
GOTO 41;
j:=j+1;
END;
l:=3584;
GOTO 31;
41:
j:=j+1;
l:=j;
WHILE j<3583 DO
BEGIN
IF(eqtb[j].hh.rh<>eqtb[j+1].hh.rh)OR(eqtb[j].hh.b0
<>eqtb[j+1].hh.b0)OR(eqtb[j].hh.b1<>eqtb[j+1].hh.b1)THEN
GOTO 31;
j:=j+1;
END;
31:
BEGIN
fmtfile↑.int:=l-k;
Put(fmtfile);
END;
WHILE k<l DO
BEGIN
BEGIN
fmtfile↑:=eqtb[k];
Put(fmtfile);
END;
k:=k+1;
END;
k:=j+1;
BEGIN
fmtfile↑.int:=k-l;
Put(fmtfile);
END;
UNTIL k=3584;
{1195}
REPEAT
j:=k;
WHILE j<4279 DO
BEGIN
IF eqtb[j].int=eqtb[j+1].int THEN
GOTO 42;
j:=j+1;
END;
l:=4280;
GOTO 32;
42:
j:=j+1;
l:=j;
WHILE j<4279 DO
BEGIN
IF eqtb[j].int<>eqtb[j+1].int THEN
GOTO 32;
j:=j+1;
END;
32:
BEGIN
fmtfile↑.int:=l-k;
Put(fmtfile);
END;
WHILE k<l DO
BEGIN
BEGIN
fmtfile↑:=eqtb[k];
Put(fmtfile);
END;
k:=k+1;
END;
k:=j+1;
BEGIN
fmtfile↑.int:=k-l;
Put(fmtfile);
END;
UNTIL k>4279;
BEGIN
fmtfile↑.int:=parloc;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=sendloc;
Put(fmtfile);
END;
{1197}
BEGIN
fmtfile↑.int:=hashused;
Put(fmtfile);
END;
cscount:=2356-hashused;
FOR p:=257 TO hashused DO
IF hash[p].rh<>0 THEN
BEGIN
BEGIN
fmtfile↑.int
:=p;
Put(fmtfile);
END;
BEGIN
fmtfile↑.hh:=hash[p];
Put(fmtfile);
END;
cscount:=cscount+1;
END;
FOR p:=hashused+1 TO 2360 DO
BEGIN
fmtfile↑.hh:=hash[p];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=cscount;
Put(fmtfile);
END;
println;
printint(cscount);
print(1027);
{1199}
BEGIN
fmtfile↑.int:=fmemptr;
Put(fmtfile);
END;
FOR k:=7 TO fmemptr-1 DO
BEGIN
fmtfile↑:=fontinfo[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontptr;
Put(fmtfile);
END;
FOR k:=1 TO fontptr DO{1201}
BEGIN
BEGIN
fmtfile↑.int:=fontcode[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.qqqq:=fontcheck[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontsize[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontdsize[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontparams[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontname[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontarea[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontbc[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontec[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=charbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=widthbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=heightbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=depthbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=italicbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=ligkernbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=kernbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=extenbase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=parambase[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=fontglue[k];
Put(fmtfile);
END;
printnl(1030);
printint(fontcode[k]);
printchar(61);
printfilenam(fontname[k],fontarea[k],226);
IF fontsize[k]<>fontdsize[k]THEN
BEGIN
print(562);
printscaled(fontsize[k]);
print(497);
END;
END;
FOR k:=0 TO badfontcode-1 DO
IF(fontnumber[k]<>0)AND(fontcode[fontnumber
[k]]<>k)THEN
BEGIN
BEGIN
fmtfile↑.int:=fontnumber[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=k;
Put(fmtfile);
END;
END;
BEGIN
fmtfile↑.int:=0;
Put(fmtfile);
END;
println;
printint(fmemptr-7);
print(1028);
printint(fontptr-0);
print(1029);
IF fontptr<>1 THEN
printchar(115);
{1203}
BEGIN
fmtfile↑.int:=hyphcount;
Put(fmtfile);
END;
FOR k:=0 TO 307 DO
IF hyphword[k]<>0 THEN
BEGIN
BEGIN
fmtfile↑.int:=k;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=hyphword[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=hyphlist[k];
Put(fmtfile);
END;
END;
BEGIN
fmtfile↑.int:=triemax;
Put(fmtfile);
END;
FOR k:=0 TO triemax DO
BEGIN
fmtfile↑.hh:=trie[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=trieopptr;
Put(fmtfile);
END;
FOR k:=1 TO trieopptr DO
BEGIN
BEGIN
fmtfile↑.int:=hyfdistance[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=hyfnum[k];
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=hyfnext[k];
Put(fmtfile);
END;
END;
println;
printint(hyphcount);
print(1031);
IF hyphcount<>1 THEN
printchar(115);
printnl(1032);
printint(triemax);
print(579);
printint(trieopptr);
print(1033);
IF trieopptr<>1 THEN
printchar(115);
{1205}
BEGIN
fmtfile↑.int:=interaction;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=formatident;
Put(fmtfile);
END;
BEGIN
fmtfile↑.int:=69069;
Put(fmtfile);
END;
wclose(fmtfile);
eqtb[3614].int:=0;
END;
{1227}{1228}PROCEDURE Newwhatsit(s:smallnumber;
w:smallnumber);
VAR
p:halfword;
BEGIN
p:=getnode(w);
mem[p].hh.b0:=8;
mem[p].hh.b1:=s;
mem[curlist.tailfield].hh.rh:=p;
curlist.tailfield:=p;
END;
{1229}
PROCEDURE Newsendwhats(w:smallnumber);
VAR
p:halfword;
BEGIN
Newwhatsit(curchr,w);
scanfourbiti;
mem[curlist.tailfield+1].hh.lh:=curval;
END;
PROCEDURE Doextension;
VAR
i,j,k:integer;
p,q,r:halfword;
BEGIN
CASE curchr OF
0:{1230}BEGIN
Newsendwhats(3);
scanoptional;
scanfilename;
mem[curlist.tailfield+1].hh.rh:=curname;
mem[curlist.tailfield+2].hh.lh:=curarea;
mem[curlist.tailfield+2].hh.rh:=curext;
END;
1:{1231}BEGIN
k:=csptr;
Newsendwhats(2);
csptr:=k;
p:=scantoks(false,false);
mem[curlist.tailfield+1].hh.rh:=defref;
END;
2:{1232}BEGIN
Newsendwhats(2);
mem[curlist.tailfield+1].hh.rh:=0;
END;
3:{1233}BEGIN
Newwhatsit(3,2);
mem[curlist.tailfield+1].hh.lh:=0;
p:=scantoks(false,true);
mem[curlist.tailfield+1].hh.rh:=defref;
END;
OTHERS:confusion(1054)
END;
END;
{957}
PROCEDURE Handlerightb;
LABEL
30,10;
VAR
p:halfword;
BEGIN
CASE curgroup OF
1:unsave;
0:BEGIN
printnl(773);
BEGIN
helpptr:=2;
helpline[1]:=774;
helpline[0]:=775;
END;
error;
END;
15,16,17:Extrarightbr;
{974}2:Package(0);
3:BEGIN
Endgraf;
Package(0);
END;
4:BEGIN
Endgraf;
Package(4);
END;
{989}13:BEGIN
Endgraf;
unsave;
saveptr:=saveptr-1;
IF curlist.headfield<>curlist.tailfield THEN
BEGIN
p:=vpackage(mem[
curlist.headfield].hh.rh,0,1,1073741823);
popnest;
IF savestack[saveptr+0].int<255 THEN
BEGIN
BEGIN
mem[curlist.tailfield].
hh.rh:=getnode(3);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=3;
mem[curlist.tailfield].hh.b1:=savestack[saveptr+0].int;
mem[curlist.tailfield+1].int:=mem[p+3].int+mem[p+2].int;
mem[curlist.tailfield+2].int:=mem[p+5].hh.rh;
END
ELSE
BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=getnode(2);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=5;
mem[curlist.tailfield].hh.b1:=0;
mem[curlist.tailfield+1].int:=mem[p+5].hh.rh;
END;
freenode(p,7);
END;
{369}
BEGIN
getnctoken;
IF curcmd<>10 THEN
backinput;
END;
END;
10:{912}BEGIN
IF curinput.locfield<>0 THEN
confusion(256);
endtokenlist;
Endgraf;
unsave;
outputactive:=false;
{913}
IF eqtb[2893].hh.rh<>0 THEN
BEGIN
printnl(732);
BEGIN
helpptr:=3;
helpline[2]:=733;
helpline[1]:=734;
helpline[0]:=735;
END;
error;
flushnodelis(eqtb[2893].hh.rh);
eqtb[2893].hh.rh:=0;
END;
IF curlist.tailfield<>curlist.headfield THEN
BEGIN
mem[pagetail].hh.rh:=
mem[curlist.headfield].hh.rh;
pagetail:=curlist.tailfield;
END;
IF mem[10002].hh.rh<>0 THEN
BEGIN
IF mem[10001].hh.rh=0 THEN
nest[0].
tailfield:=pagetail;
mem[pagetail].hh.rh:=mem[10001].hh.rh;
mem[10001].hh.rh:=mem[10002].hh.rh;
mem[10002].hh.rh:=0;
pagetail:=10002;
END;
popnest;
Buildpage;
END;
{1007}12:Builddiscret;
{1025}9:BEGIN
Endgraf;
unsave;
Alignpeek;
END;
{1056}14:BEGIN
Endgraf;
unsave;
saveptr:=saveptr-2;
p:=vpackage(mem[curlist.headfield].hh.rh,savestack[saveptr+1].int,
savestack[saveptr+0].int,1073741823);
popnest;
BEGIN
mem[curlist.tailfield].hh.rh:=newnoad;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=28;
mem[curlist.tailfield+1].hh.rh:=2;
mem[curlist.tailfield+1].hh.lh:=p;
END;
{1072}11:BEGIN
unsave;
saveptr:=saveptr-1;
mem[savestack[saveptr+0].int].hh.rh:=3;
mem[savestack[saveptr+0].int].hh.lh:=Finmlist(0);
END;
{1104}5:BEGIN
leavetranspa;
{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF curcmd=57 THEN
passblock(0)
ELSE
BEGIN
printnl(909);
BEGIN
helpptr:=3;
helpline[2]:=913;
helpline[1]:=911;
helpline[0]:=912;
END;
backerror;
END;
END;
6:BEGIN
leavetranspa;
{369}
BEGIN
getnctoken;
IF curcmd<>10 THEN
backinput;
END;
END;
{1108}7:BEGIN
leavetranspa;
WHILE true DO
BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
IF curcmd=1 THEN
passblock(1)
ELSE
IF curcmd=57 THEN
GOTO 30
ELSE
{1109}
BEGIN
printnl(917);
BEGIN
helpptr:=3;
helpline[2]:=918;
helpline[1]:=919;
helpline[0]:=912;
END;
backerror;
GOTO 10;
END;
END;
30:
passblock(0);
END;
OTHERS:confusion(776)
END;
10:
END;
PROCEDURE Maincontrol;
LABEL
60,21,70,71,72,73,74,10;
VAR
t:integer;
{917}l:quarterword;
c:eightbits;
f:internalfont;
r:halfword;
p:halfword;
k:0..fontmemsize;
q:halfword;
i:fourquarters;
j:fourquarters;
s:integer;
ligaturepres:boolean;
BEGIN
60:
getnctoken;
21:{916}
IF interrupt>0 THEN
IF oktointerrup THEN
BEGIN
backinput;
pauseforinst;
GOTO 60;
END;
IF panicking THEN
checkmem(false);
IF eqtb[3617].int<>0 THEN
BEGIN
begindiagnos;
printnl(123);
IF curlist.modefield<>shownmode THEN
BEGIN
printmode(curlist.modefield);
print(553);
shownmode:=curlist.modefield;
END;
printcmdchr(curcmd,curchr);
printchar(125);
enddiagnosti(false);
END;
CASE Abs(curlist.modefield)+curcmd OF
104,105:GOTO 70;
109:BEGIN
scancharnum;
curchr:=curval;
GOTO 70;
END;
103:IF curlist.auxfield=1000 THEN
GOTO 74
ELSE
Appspace;
156,248:GOTO 74;
{931}1,93,185,11,14,195:;
40,132,224:BEGIN{366}
REPEAT
getnctoken;
UNTIL curcmd<>10;
GOTO 21;
END;
20:startinput;
15:IF Itsallover THEN
GOTO 10;
{934}112,204,{944}36,129,221,{962}24,115,207,{980}226,{987}39,223,{1000}
209,43,{1014}228,{1022}34,125,218,{1034}47,139,7,99,191:Reportillega;
{932}8,100,9,101,18,110,49,141,16,108,48,140,51,143,65,157,52,144,54,146
,53,145,31,123,50,142,29,121,45,137,194,198,199,212:BEGIN
Insertdollar;
GOTO 21;
END;
{943}37,128,220:BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=scanrulespec;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
IF Abs(curlist.modefield)=1 THEN
curlist.auxfield:=-65536000;
END;
{945}28,119,211,213:Appendglue;
30,122,214,215:Appendkern;
{951}2,94:newsavelevel(1);
61,153,245:newsavelevel(15);
62,154,246:IF curgroup=15 THEN
unsave
ELSE
Offsave;
{956}3,95,187:Handlerightb;
{961}23,116,208:BEGIN
t:=curchr;
scandimen(false,false,false);
IF t=0 THEN
savestack[saveptr+0].int:=curval
ELSE
savestack[saveptr+0].
int:=-curval;
Scanbox;
END;
32,124,216:BEGIN
savestack[saveptr+0].int:=1073742237+curchr;
Scanbox;
END;
22,114,206:BEGIN
savestack[saveptr+0].int:=0;
Beginbox;
END;
{979}42:Newgraf(curchr>0);
12,13,17,4,67,66,44,46,27,64,68:BEGIN
backinput;
Newgraf(true);
END;
{982}134:Indentinhmod;
{984}106:BEGIN
Endgraf;
IF curlist.modefield=1 THEN
Buildpage;
END;
107,120:BEGIN
backinput;
curtok:=partoken;
csptr:=parloc;
curcmd:=eqtb[csptr].hh.b0;
curchr:=eqtb[csptr].hh.rh;
GOTO 21;
END;
{986}38,130,222,131:Begininserto;
19,111,203:Makemark;
{991}70,162,254:Changeaux;
{993}41,133,225:Appendpenalt;
{995}26,118,210:Deleteskip;
{998}25,117:Unpackage;
{1001}135:Appenditalic;
227:BEGIN
mem[curlist.tailfield].hh.rh:=newkern(0);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
{1005}138,230:Appenddiscre;
{1011}159,251:BEGIN
mem[10011].hh.rh:=thetoks(curchr>0);
begintokenli(mem[10003].hh.rh,3);
END;
158,250:BEGIN
mem[10011].hh.rh:=numtoks;
begintokenli(mem[10003].hh.rh,3);
END;
160,252,161,253:Insthe;
{1013}136:Makeaccent;
{1018}6,98,190,5,97,189:BEGIN
Alignerror;
GOTO 21;
END;
35,127,219:Noalignerror;
63,155,247:Omiterror;
{1023}33,126:Initalign;
217:IF Privileged THEN
IF curgroup=16 THEN
Initalign
ELSE
Offsave;
10,102:Doendv;
{1026}96:Initmath;
{1030}231:IF Privileged THEN
Starteqno;
{1040}186:BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=newnoad;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
backinput;
Scanmath(curlist.tailfield+1);
END;
{1043}196,197:Setmathchar(eqtb[3072+curchr].hh.rh);
201:BEGIN
scancharnum;
Setmathchar(curval+28672);
END;
202:BEGIN
scanfifteenb;
Setmathchar(curval);
END;
200:BEGIN
scantwentyse;
Setmathchar(curval DIV 4096);
END;
{1047}233:BEGIN
BEGIN
mem[curlist.tailfield].hh.rh:=newnoad;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
mem[curlist.tailfield].hh.b0:=curchr;
Scanmath(curlist.tailfield+1);
END;
234:Mathlimitswi;
{1051}249:Mathradical;
{1053}229:Mathac;
{1055}238:BEGIN
scanspec;
newsavelevel(14);
pushnest;
curlist.modefield:=-1;
curlist.auxfield:=-65536000;
END;
{1059}236:BEGIN
mem[curlist.tailfield].hh.rh:=newstyle(curchr);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
237:Mathnonscrip;
{1061}193,192:Subsup;
{1066}235:Mathfraction;
{1075}232:Mathleftrigh;
{1078}188:IF curgroup=16 THEN
Finmath
ELSE
Offsave;
{1095}56,148,240:Conditional;
{1105}57,149,241:Caseconditio;
58,150,242:Spuriouselse;
{1112}71,163,255,72,164,256,73,165,257,74,166,258,75,167,259,76,168,260,
77,169,261,78,170,262,79,171,263,80,172,264,81,173,265,82,174,266,83,175
,267,84,176,268,85,177,269,86,178,270,87,179,271,88,180,272,89,181,273,
90,182,274,91,183,275,92,184,276:Prefixedcomm;
{1156}59,151,243:Issuemessage;
{1164}55,147,239:Shiftcase;
{1169}21,113,205:Showwhatever;
{1226}60,152,244:Doextension;
END;
GOTO 60;
70:{918}
f:=eqtb[2894].hh.rh;
IF f=0 THEN
BEGIN
Missingfont;
GOTO 60;
END;
c:=curchr;
71:
IF(c<fontbc[f])OR(c>fontec[f])THEN
BEGIN
charwarning(f,c);
GOTO 60;
END;
72:
q:=curlist.tailfield;
ligaturepres:=false;
l:=c;
73:{920}
IF c<128 THEN
BEGIN
s:=eqtb[3456+c].hh.rh;
IF s=1000 THEN
curlist.auxfield:=1000
ELSE
IF s<1000 THEN
BEGIN
IF s>0
THEN
curlist.auxfield:=s;
END
ELSE
IF curlist.auxfield<1000 THEN
curlist.auxfield:=1000
ELSE
curlist.auxfield:=s;
END
ELSE
curlist.auxfield:=1000;
{921}i:=fontinfo[charbase[f]+l].qqqq;
IF(i.b0>0)THEN
BEGIN
p:=avail;
IF p=0 THEN
p:=getavail
ELSE
BEGIN
avail:=mem[p].hh.rh;
mem[p].hh.rh:=0;
dynused:=dynused+1;
END;
mem[p].hh.b0:=f;
mem[p].hh.b1:=c;
mem[curlist.tailfield].hh.rh:=p;
curlist.tailfield:=p;
END
ELSE
charwarning(f,l);
{922}getnext;
IF(curcmd=11)OR(curcmd=12)THEN
r:=curchr
ELSE
BEGIN
nctoken;
IF curcmd=16 THEN
BEGIN
scancharnum;
r:=curval;
END
ELSE
r:=256;
END;
IF((i.b2 MOD 4)=1)AND(r<>256)THEN
{923}
BEGIN
k:=ligkernbase[f]+i.b3;
REPEAT
j:=fontinfo[k].qqqq;
IF j.b1=r THEN
IF j.b2<128 THEN
{926}
BEGIN
ligaturepres:=true;
l:=j.b3;
c:=r;
GOTO 73;
END
ELSE
{924}
BEGIN{925}
IF ligaturepres THEN
BEGIN
p:=newligature(f,l,mem
[q].hh.rh);
mem[q].hh.rh:=p;
curlist.tailfield:=p;
END;
IF c=45 THEN
IF curlist.modefield=93 THEN
BEGIN
mem[curlist.tailfield].
hh.rh:=newdisc;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
BEGIN
mem[curlist.tailfield].hh.rh:=newkern(fontinfo[kernbase[f]+j.b3].
int);
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
c:=r;
GOTO 72;
END;
k:=k+1;
UNTIL j.b0>=128;
END;
{925}
IF ligaturepres THEN
BEGIN
p:=newligature(f,l,mem[q].hh.rh);
mem[q].hh.rh:=p;
curlist.tailfield:=p;
END;
IF c=45 THEN
IF curlist.modefield=93 THEN
BEGIN
mem[curlist.tailfield].
hh.rh:=newdisc;
curlist.tailfield:=mem[curlist.tailfield].hh.rh;
END;
IF r=256 THEN
GOTO 21;
c:=r;
GOTO 71;
74:{927}
IF eqtb[2373].hh.rh=0 THEN
BEGIN{928}
BEGIN
p:=fontglue[eqtb[2894
].hh.rh];
IF p=0 THEN
BEGIN
f:=eqtb[2894].hh.rh;
p:=newspec(0);
k:=parambase[f]+2;
mem[p+1].int:=fontinfo[k].int;
mem[p+2].int:=fontinfo[k+1].int;
mem[p+3].int:=fontinfo[k+2].int;
fontglue[f]:=p;
END;
END;
q:=newglue(p);
END
ELSE
q:=newparamglue(11);
mem[curlist.tailfield].hh.rh:=q;
curlist.tailfield:=q;
GOTO 60;
10:
END;
{1182}{443}FUNCTION Openfmtfile:boolean;
LABEL
40,10;
VAR
j:0..bufsize;
BEGIN
IF buffer[curinput.locfield]=33 THEN
BEGIN
curinput.locfield:=
curinput.locfield+1;
j:=curinput.locfield;
buffer[Last]:=32;
WHILE buffer[j]<>32 DO j:=j+1;
packbuffered(0,curinput.locfield,j-1);
IF wopenin(fmtfile)THEN
BEGIN
curinput.locfield:=j;
GOTO 40;
END;
packbuffered(9,curinput.locfield,j-1);
IF wopenin(fmtfile)THEN
BEGIN
curinput.locfield:=j;
GOTO 40;
END;
Writeln(termout,'Sorry, I can''t find that format; will try BASIC.');
END;
packbuffered(14,1,0);
IF NOT wopenin(fmtfile)THEN
BEGIN
Writeln(termout,
'I can''t find the BASIC format file!');
Openfmtfile:=false;
GOTO 10;
END;
40:
Openfmtfile:=true;
10:
END;
FUNCTION Loadfmtfile:boolean;
LABEL
6666,10;
VAR
j,k:integer;
p,q:halfword;
x,y:integer;
w:fourquarters;
BEGIN{1187}
x:=fmtfile↑.int;
IF x<>404035012 THEN
GOTO 6666;
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<>10000 THEN
GOTO 6666;
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<>4279 THEN
GOTO 6666;
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<>1777 THEN
GOTO 6666;
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<>307 THEN
GOTO 6666;
{1189}
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<0 THEN
GOTO 6666;
IF x>poolsize THEN
BEGIN
Writeln(termout,'---! Must increase the ',
'string pool size');
GOTO 6666;
END
ELSE
poolptr:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<0 THEN
GOTO 6666;
IF x>maxstrings THEN
BEGIN
Writeln(termout,'---! Must increase the ',
'max strings');
GOTO 6666;
END
ELSE
strptr:=x;
END;
FOR k:=0 TO strptr DO
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>poolptr)THEN
GOTO 6666
ELSE
strstart[k]:=x;
END;
k:=0;
WHILE k+4<poolptr DO
BEGIN
BEGIN
Get(fmtfile);
w:=fmtfile↑.qqqq;
END;
strpool[k]:=w.b0;
strpool[k+1]:=w.b1;
strpool[k+2]:=w.b2;
strpool[k+3]:=w.b3;
k:=k+4;
END;
k:=poolptr-4;
BEGIN
Get(fmtfile);
w:=fmtfile↑.qqqq;
END;
strpool[k]:=w.b0;
strpool[k+1]:=w.b1;
strpool[k+2]:=w.b2;
strpool[k+3]:=w.b3;
{1191}
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>10000)THEN
GOTO 6666
ELSE
rover:=x;
END;
p:=0;
q:=rover;
x:=0;
REPEAT
FOR k:=p TO q+1 DO
BEGIN
Get(fmtfile);
mem[k]:=fmtfile↑;
END;
p:=q+mem[q].hh.lh;
IF(p>10000)OR((q>=mem[q+1].hh.rh)AND(mem[q+1].hh.rh<>rover))THEN
GOTO
6666;
q:=mem[q+1].hh.rh;
UNTIL q=rover;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<10000 THEN
GOTO 6666;
IF x>memmax THEN
BEGIN
Writeln(termout,'---! Must increase the ',
'mem max');
GOTO 6666;
END
ELSE
memend:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>memend)THEN
GOTO 6666
ELSE
avail:=x;
END;
FOR k:=p TO memend DO
BEGIN
Get(fmtfile);
mem[k]:=fmtfile↑;
END;
BEGIN
Get(fmtfile);
varused:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
dynused:=fmtfile↑.int;
END;
maxvarused:=varused;
{1193}{1196}k:=1;
REPEAT
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<1)OR(k+x>4279)THEN
GOTO 6666;
FOR j:=k TO k+x-1 DO
BEGIN
Get(fmtfile);
eqtb[j]:=fmtfile↑;
END;
k:=k+x;
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(k+x>4280)THEN
GOTO 6666;
FOR j:=k TO k+x-1 DO eqtb[j]:=eqtb[k-1];
k:=k+x;
UNTIL k>4279;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<257)OR(x>2357)THEN
GOTO 6666
ELSE
parloc:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<257)OR(x>2357)THEN
GOTO 6666
ELSE
sendloc:=x;
END;
{1198}
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<257)OR(x>2357)THEN
GOTO 6666
ELSE
hashused:=x;
END;
p:=256;
REPEAT
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<p+1)OR(x>hashused)THEN
GOTO 6666
ELSE
p:=x;
END;
BEGIN
Get(fmtfile);
hash[p]:=fmtfile↑.hh;
END;
UNTIL p=hashused;
FOR p:=hashused+1 TO 2360 DO
BEGIN
Get(fmtfile);
hash[p]:=fmtfile↑.hh;
END;
BEGIN
Get(fmtfile);
cscount:=fmtfile↑.int;
END;
{1200}
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<7 THEN
GOTO 6666;
IF x>fontmemsize THEN
BEGIN
Writeln(termout,'---! Must increase the ',
'font mem size');
GOTO 6666;
END
ELSE
fmemptr:=x;
END;
FOR k:=7 TO fmemptr-1 DO
BEGIN
Get(fmtfile);
fontinfo[k]:=fmtfile↑;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<0 THEN
GOTO 6666;
IF x>fontmax THEN
BEGIN
Writeln(termout,'---! Must increase the ',
'font max');
GOTO 6666;
END
ELSE
fontptr:=x;
END;
FOR k:=1 TO fontptr DO{1202}
BEGIN
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>badfontcode)THEN
GOTO 6666
ELSE
fontcode[k]:=x;
END;
fontnumber[fontcode[k]]:=k;
BEGIN
Get(fmtfile);
fontcheck[k]:=fmtfile↑.qqqq;
END;
BEGIN
Get(fmtfile);
fontsize[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
fontdsize[k]:=fmtfile↑.int;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>65535)THEN
GOTO 6666
ELSE
fontparams[k]:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>strptr)THEN
GOTO 6666
ELSE
fontname[k]:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>strptr)THEN
GOTO 6666
ELSE
fontarea[k]:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>255)THEN
GOTO 6666
ELSE
fontbc[k]:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>255)THEN
GOTO 6666
ELSE
fontec[k]:=x;
END;
BEGIN
Get(fmtfile);
charbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
widthbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
heightbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
depthbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
italicbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
ligkernbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
kernbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
extenbase[k]:=fmtfile↑.int;
END;
BEGIN
Get(fmtfile);
parambase[k]:=fmtfile↑.int;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>10000)THEN
GOTO 6666
ELSE
fontglue[k]:=x;
END;
END;
REPEAT
BEGIN
Get(fmtfile);
y:=fmtfile↑.int;
END;
IF Eof(fmtfile)THEN
GOTO 6666;
IF y<>0 THEN
BEGIN
IF(y<0)OR(y>=fontptr)THEN
GOTO 6666;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>badfontcode)THEN
GOTO 6666
ELSE
k:=x;
END;
fontnumber[k]:=y;
END;
UNTIL y=0;
{1204}
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>307)THEN
GOTO 6666
ELSE
hyphcount:=x;
END;
FOR k:=1 TO hyphcount DO
BEGIN
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>307)THEN
GOTO 6666
ELSE
j:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>strptr)THEN
GOTO 6666
ELSE
hyphword[j]:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>65535)THEN
GOTO 6666
ELSE
hyphlist[j]:=x;
END;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF x<0 THEN
GOTO 6666;
IF x>triesize THEN
BEGIN
Writeln(termout,'---! Must increase the ',
'trie size');
GOTO 6666;
END
ELSE
triemax:=x;
END;
FOR k:=0 TO triemax DO
BEGIN
Get(fmtfile);
trie[k]:=fmtfile↑.hh;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>255)THEN
GOTO 6666
ELSE
trieopptr:=x;
END;
FOR k:=1 TO trieopptr DO
BEGIN
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>63)THEN
GOTO 6666
ELSE
hyfdistance[k]:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>63)THEN
GOTO 6666
ELSE
hyfnum[k]:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>255)THEN
GOTO 6666
ELSE
hyfnext[k]:=x;
END;
END;
{1206}
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>3)THEN
GOTO 6666
ELSE
interaction:=x;
END;
BEGIN
BEGIN
Get(fmtfile);
x:=fmtfile↑.int;
END;
IF(x<0)OR(x>strptr)THEN
GOTO 6666
ELSE
formatident:=x;
END;
BEGIN
Get(fmtfile);x:=fmtfile↑.int;
END;
IF(x<>69069)OR Eof(fmtfile)THEN
GOTO 6666;
Loadfmtfile:=true;GOTO 10;
6666:
Writeln(termout,'(Fatal format file error; I''m stymied)');
Loadfmtfile:=false;10:
END;
{1208}{1212}PROCEDURE Closefilesan;
VAR
k:integer;
BEGIN{1245}
FOR k:=0 TO 15 DO
IF sendopen[k]THEN
aclose(sendfile[k]);
IF eqtb[3614].int<>0 THEN
{1213}
BEGIN
printnl(1039);
println;
printint(strptr);
print(1025);
printint(poolptr);
printnl(1038);
printint(maxstrings);
printchar(32);
printint(poolsize);
printnl(1040);
printint(maxvarused);
printchar(38);
printint(memend-9999);
printnl(1038);
printint(10000);
printchar(38);
printint(memmax-9999);
println;
printint(cscount);
print(1027);
printnl(1038);
printint(2100);
println;
printint(fmemptr);
print(1028);
printint(fontptr-0);
print(1041);
IF fontptr<>1 THEN
printchar(115);
printnl(1038);
printint(fontmemsize);
printchar(32);
printint(fontmax-0);
println;
printint(hyphcount);
print(1031);
IF hyphcount<>1 THEN
printchar(115);
printnl(1038);
printint(307);
printnl(1042);
printint(maxinstack);
print(1043);
printint(maxneststack);
print(1044);
printint(maxparamstac);
print(1045);
printint(maxbufstack+1);
print(1046);
printint(maxsavestack+6);
printchar(115);
printnl(1038);
printint(stacksize);
print(1043);
printint(nestsize);
print(1044);
printint(paramsize);
print(1045);
printint(bufsize);
print(1046);
printint(savesize);
printchar(115);
END;
{554}
IF totalpages=0 THEN
printnl(591)
ELSE
BEGIN
BEGIN
dvibuf[dviptr]:=
243;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
dvifour(lastbop);
lastbop:=dvioffset+dviptr-5;
dvifour(25400000);
dvifour(473628672);
preparemag;
dvifour(eqtb[3600].int);
dvifour(maxv);
dvifour(maxh);
BEGIN
dvibuf[dviptr]:=maxpush DIV 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
BEGIN
dvibuf[dviptr]:=maxpush MOD 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
BEGIN
dvibuf[dviptr]:=totalpages DIV 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
BEGIN
dvibuf[dviptr]:=totalpages MOD 256;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
{555}
WHILE fontptr>0 DO
BEGIN
IF fontused[fontptr]THEN
BEGIN
dvifour(
fontptr-1);
BEGIN
dvibuf[dviptr]:=fontcheck[fontptr].b0;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
BEGIN
dvibuf[dviptr]:=fontcheck[fontptr].b1;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
BEGIN
dvibuf[dviptr]:=fontcheck[fontptr].b2;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
BEGIN
dvibuf[dviptr]:=fontcheck[fontptr].b3;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
dvifour(fontsize[fontptr]);
dvifour(fontdsize[fontptr]);
BEGIN
dvibuf[dviptr]:=(strstart[fontarea[fontptr]+1]-strstart[fontarea[
fontptr]]);
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
BEGIN
dvibuf[dviptr]:=(strstart[fontname[fontptr]+1]-strstart[fontname[
fontptr]]);
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
{556}
FOR k:=strstart[fontarea[fontptr]]TO strstart[fontarea[fontptr]+1]
-1 DO
BEGIN
dvibuf[dviptr]:=strpool[k];
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
FOR k:=strstart[fontname[fontptr]]TO strstart[fontname[fontptr]+1]-1 DO
BEGIN
dvibuf[dviptr]:=strpool[k];
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
END;
fontptr:=fontptr-1;
END;
dvifour(-1);
dvifour(lastbop);
BEGIN
dvibuf[dviptr]:=2;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
k:=4+((dvibufsize-dviptr)MOD 4);
WHILE k>0 DO
BEGIN
BEGIN
dvibuf[dviptr]:=223;
dviptr:=dviptr+1;
IF dviptr=dvilimit THEN
dviswap;
END;
k:=k-1;
END;
{515}
IF dvilimit=halfbuf THEN
writedvi(halfbuf,dvibufsize-1);
IF dviptr>0 THEN
writedvi(0,dviptr-1);
printnl(592);
print(outputfilena);
print(153);
printint(totalpages);
print(593);
printint(dvioffset+dviptr);
print(594);
bclose(dvifile);
IF pseudotypein=0 THEN
BEGIN
k:=selector;
selector:=21;
print(595);
print(outputfilena);
selector:=k;
BEGIN
IF poolptr+1>poolsize THEN
overflow(129,poolsize);
END;
pseudotypein:=makestring;
END;
END;
IF jobname>0 THEN
BEGIN
Writeln(logfile);
aclose(logfile);
END;
IF(pseudotypein<>0)AND(interaction>0)THEN
BEGIN
FOR k:=strstart[
pseudotypein]TO strstart[pseudotypein+1]-1 DO ptldch(xchr[strpool[k]]);
ptldbk(137);
ptldln;
END;
END;
{1214}PROCEDURE Finalcleanup;
LABEL
10;
VAR
c:smallnumber;
k:smallnumber;
t:integer;
BEGIN
c:=curchr;
IF jobname=0 THEN
openlogfile;
IF curlevel>1 THEN
BEGIN
printnl(1047);
printint(curlevel-1);
printchar(41);
END;
IF c=1 THEN
BEGIN
Storefmtfile;
GOTO 10;
printnl(1048);
END;
10:
END;
{1215}
PROCEDURE Initprim;
BEGIN
nonewcontrol:=false;
{218}primitive(238,73,0);
primitive(239,73,1);
primitive(240,73,2);
primitive(241,73,3);
primitive(242,73,4);
primitive(243,73,5);
primitive(244,73,6);
primitive(245,73,7);
primitive(246,73,8);
primitive(247,73,9);
primitive(248,73,10);
primitive(249,73,11);
primitive(250,73,12);
primitive(251,73,13);
primitive(252,73,14);
primitive(253,73,15);
primitive(254,73,16);
{221}primitive(256,70,2636);
primitive(257,70,2637);
{226}primitive(258,71,0);
primitive(259,71,1);
primitive(260,71,2);
primitive(261,71,3);
primitive(262,71,4);
primitive(263,71,5);
primitive(264,71,6);
primitive(265,71,7);
primitive(266,71,8);
primitive(267,71,9);
primitive(268,71,10);
primitive(269,71,11);
primitive(270,71,12);
primitive(271,71,13);
primitive(272,71,14);
primitive(273,71,15);
primitive(274,71,16);
primitive(275,71,17);
primitive(276,71,18);
primitive(277,71,19);
primitive(278,71,20);
primitive(279,71,21);
primitive(280,71,22);
primitive(281,71,23);
primitive(282,71,24);
primitive(283,71,25);
primitive(284,71,26);
primitive(285,71,27);
primitive(286,71,28);
primitive(287,71,29);
primitive(288,71,30);
primitive(289,71,31);
primitive(290,71,32);
primitive(291,71,33);
primitive(292,71,34);
primitive(293,71,35);
primitive(294,71,36);
primitive(295,71,37);
{233}primitive(297,72,0);
primitive(298,72,1);
primitive(299,72,2);
primitive(300,72,3);
primitive(301,72,4);
primitive(302,72,5);
primitive(303,72,6);
primitive(304,72,7);
primitive(305,72,8);
primitive(306,72,9);
primitive(307,72,10);
primitive(308,72,11);
primitive(309,72,12);
primitive(310,72,13);
primitive(311,72,14);
primitive(312,72,15);
primitive(313,72,16);
{248}primitive(319,0,0);
primitive(320,81,0);
primitive(321,16,0);
primitive(322,17,0);
primitive(215,18,0);
primitive(323,19,0);
primitive(324,40,0);
primitive(325,83,0);
primitive(58,78,0);
primitive(326,79,0);
primitive(327,65,0);
primitive(328,88,0);
primitive(329,24,0);
primitive(330,25,0);
primitive(331,68,0);
primitive(332,32,0);
primitive(333,33,0);
primitive(334,34,0);
primitive(335,35,0);
primitive(336,36,0);
primitive(198,37,0);
primitive(216,38,0);
primitive(337,39,0);
primitive(338,89,0);
primitive(47,42,0);
primitive(339,43,0);
primitive(340,44,0);
primitive(341,74,0);
primitive(342,15,0);
primitive(343,49,0);
primitive(201,52,0);
primitive(344,53,0);
primitive(345,56,0);
primitive(346,57,0);
primitive(347,62,0);
primitive(348,60,0);
primitive(349,61,0);
primitive(32,63,0);
primitive(350,64,0);
{312}primitive(397,13,0);
parloc:=curval;
partoken:=4096+parloc;
{346}primitive(426,93,0);
primitive(427,93,1);
primitive(428,93,2);
primitive(429,93,3);
primitive(430,93,4);
{373}primitive(458,67,0);
primitive(459,67,1);
primitive(460,67,2);
primitive(461,75,17);
primitive(462,66,0);
primitive(463,66,1);
{378}primitive(466,69,93);
primitive(467,69,1);
{680}primitive(368,4,128);
primitive(370,5,129);
hash[2357].rh:=370;
eqtb[2357]:=eqtb[curval];
{938}primitive(750,14,0);
primitive(751,14,1);
{946}primitive(753,26,4);
primitive(754,26,0);
primitive(755,26,1);
primitive(756,26,2);
primitive(757,26,3);
primitive(758,27,4);
primitive(759,27,0);
primitive(760,27,1);
primitive(761,27,2);
primitive(762,27,3);
primitive(202,28,5);
primitive(205,29,0);
primitive(206,30,99);
{959}primitive(783,22,1);
primitive(784,22,0);
primitive(785,23,1);
primitive(786,23,0);
primitive(787,21,0);
primitive(788,21,1);
primitive(789,21,2);
primitive(790,21,3);
primitive(791,21,4);
primitive(792,21,5);
primitive(793,21,97);
primitive(794,31,99);
primitive(795,31,100);
primitive(796,31,101);
primitive(797,31,102);
{977}primitive(811,41,1);
primitive(812,41,0);
{1003}primitive(45,45,1);
primitive(213,45,0);
{1031}primitive(858,46,0);
primitive(859,46,1);
{1045}primitive(619,48,15);
primitive(620,48,16);
primitive(621,48,17);
primitive(622,48,18);
primitive(623,48,19);
primitive(624,48,20);
primitive(625,48,21);
primitive(628,48,25);
primitive(627,48,26);
{1057}primitive(614,51,0);
primitive(615,51,2);
primitive(616,51,4);
primitive(617,51,6);
{1064}primitive(876,50,0);
primitive(877,50,1);
primitive(878,50,2);
primitive(631,50,3);
primitive(879,50,4);
primitive(880,50,5);
{1073}primitive(629,47,29);
primitive(630,47,30);
{1093}primitive(892,55,0);
primitive(893,55,1);
primitive(894,55,2);
primitive(895,55,3);
primitive(896,55,4);
primitive(897,55,5);
primitive(898,55,6);
primitive(899,55,7);
primitive(900,55,8);
primitive(901,55,9);
{1110}primitive(920,80,1);
primitive(921,80,2);
primitive(922,80,4);
primitive(923,82,0);
primitive(924,82,1);
primitive(925,82,2);
primitive(926,82,3);
{1125}primitive(942,76,2944);
primitive(943,76,3072);
primitive(944,76,3200);
primitive(945,76,3328);
primitive(946,76,3456);
primitive(947,76,3878);
primitive(636,77,2895);
primitive(637,77,2911);
primitive(638,77,2927);
{1130}primitive(955,84,0);
primitive(956,84,1);
primitive(957,84,2);
primitive(958,85,0);
primitive(959,85,1);
primitive(960,85,2);
primitive(961,86,0);
primitive(962,86,1);
primitive(963,86,2);
primitive(964,87,0);
primitive(965,87,1);
primitive(966,87,2);
{1141}primitive(978,90,0);
primitive(979,90,1);
{1151}primitive(989,91,0);
primitive(990,91,1);
primitive(991,91,2);
primitive(992,91,3);
{1157}primitive(993,58,0);
primitive(994,58,1);
{1165}primitive(1000,54,3200);
primitive(1001,54,3328);
{1170}primitive(1002,20,0);
primitive(1003,20,1);
primitive(1004,20,2);
primitive(1005,20,3);
{1223}primitive(1049,59,0);
primitive(1050,59,1);
sendloc:=curval;
primitive(1051,59,2);
primitive(1052,59,3);;
nonewcontrol:=true;
END;
{1217}PROCEDURE Debughelp;
LABEL
889,888,10;
VAR
k,l,m,n:integer;
BEGIN
GOTO 889;
888:{'*************breakpoint*************';
'***********for**debugging***********'};
889:
WHILE true DO
BEGIN
printnl(35);
Break(termout);
Read(termin,m);
IF m<0 THEN
GOTO 10;
IF m=0 THEN
GOTO 888;
Read(termin,n);
CASE m OF
{1218}1:printmemoryw(mem[n]);
2:printint(mem[n].hh.lh);
3:printint(mem[n].hh.rh);
4:printmemoryw(eqtb[n]);
5:printmemoryw(fontinfo[n]);
6:printmemoryw(savestack[n]);
7:showbox(n);
8:BEGIN
breadthmax:=10000;
depththresho:=poolsize-poolptr-10;
shownodelist(n);
END;
9:showtokenlis(n,0,1000);
10:print(n);
11:checkmem(n>0);
12:searchmem(n);
13:BEGIN
Read(termin,l);
printcmdchr(n,l);
END;
14:
FOR k:=0 TO n DO print(buffer[k]);
15:BEGIN
fontinshortd:=0;
shortdisplay(n);
END;
OTHERS:print(63)
END;
END;
10:
END;
{1211}
BEGIN
Rewrite(termout,'TTY:','/O');
IF readyalready=314159 THEN
GOTO 1;
initialize;
{14}bad:=0;
IF(halferrorlin<30)OR(halferrorlin>errorline-15)THEN
bad:=1;
IF maxprintline<60 THEN
bad:=2;
IF dvibufsize MOD 8<>0 THEN
bad:=3;
IF(10000<100)OR(10100>memmax)THEN
bad:=4;
IF 1777>2100 THEN
bad:=5;
{106}
IF(0>0)OR(255<127)THEN
bad:=11;
IF(0>0)OR(65535<32767)THEN
bad:=12;
IF(0<0)OR(255>65535)THEN
bad:=13;
IF(0<0)OR(memmax>=65535)THEN
bad:=14;
IF(0<0)OR(fontmax>255)THEN
bad:=15;
IF(savesize>65535)OR(maxstrings>65535)THEN
bad:=16;
IF(bufsize>65535)THEN
bad:=17;
{271}
IF 6457>65535 THEN
bad:=21;
{441}
IF 18>filenamesize THEN
bad:=31;
{1140}
IF 2*65535<10000 THEN
bad:=41;
IF bad>0 THEN
BEGIN
Write(termout,
'Ouch---my internal constants have been clobbered!');
Write(termout,'---case ',bad:0);
GOTO 9999;
END;
IF NOT initstrings THEN
GOTO 9999;
Initprim;
1:{55}
selector:=17;
tally:=0;
termoffset:=0;
fileoffset:=0;
{59}Write(termout,'This is TeX, Version -0.18S');
IF formatident=0 THEN
Writeln(termout,' (no format preloaded)')
ELSE
BEGIN
print(formatident);
println;
END;
{448}jobname:=0;
{453}outputfilena:=0;;
{1216}
BEGIN{309}
BEGIN
inputptr:=0;
maxinstack:=0;
inopen:=0;
maxbufstack:=0;
paramptr:=0;
maxparamstac:=0;
scannerstatu:=0;
First:=0;
curinput.statefield:=33;
curinput.startfield:=0;
curinput.indexfield:=0;
line:=0;
curinput.namefield:=0;
alignstate:=1000000;
IF NOT initterminal THEN
GOTO 9999;
curinput.limitfield:=Last;
First:=Last+1;
END;
IF(formatident=0)OR(buffer[curinput.locfield]=33)THEN
BEGIN
IF NOT
Openfmtfile THEN
GOTO 9999;
IF NOT Loadfmtfile THEN
GOTO 9999;
WHILE(curinput.locfield<curinput.limitfield)AND(buffer[curinput.locfield
]=32)DO curinput.locfield:=curinput.locfield+1;
END;
buffer[curinput.limitfield]:=13;
fixdateandti;
{665}magicoffset:=strstart[647]-9*15;
{72}
IF interaction=0 THEN
selector:=16
ELSE
selector:=17;
IF(curinput.locfield<curinput.limitfield)AND(eqtb[2944+buffer[curinput.
locfield]].hh.rh<>0)THEN
startinput;
END;
Maincontrol;
Finalcleanup;
9998:
Closefilesan;
9999:
readyalready:=0;
END.